작성 코드
import java.io.*;
import java.util.*;
public class lotto_6603 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
StringTokenizer st = new StringTokenizer(br.readLine());
int cnt = Integer.parseInt(st.nextToken());
if (cnt == 0) {
break;
}
int[] lst = new int[cnt];
for (int i = 0; i < cnt; i++) {
lst[i] = Integer.parseInt(st.nextToken());
}
List<List<Integer>> combinations = new ArrayList<>();
generateCombinations(combinations, new ArrayList<>(), lst, 0);
for (List<Integer> combination : combinations) {
for (int num : combination) {
System.out.print(num + " ");
}
System.out.println();
}
System.out.println();
}
br.close();
}
public static void generateCombinations(List<List<Integer>> combinations, List<Integer> currentCombination, int[] lst, int start) {
if (currentCombination.size() == 6) {
combinations.add(new ArrayList<>(currentCombination));
return;
}
for (int i = start; i < lst.length; i++) {
currentCombination.add(lst[i]);
generateCombinations(combinations, currentCombination, lst, i + 1);
currentCombination.remove(currentCombination.size() - 1);
}
}
}
로직 설명
- main 메서드에서는 반복문을 통해 입력을 처리합니다.
- 입력은 cnt와 숫자들로 이루어진 배열인 lst로 받습니다.
- cnt가 0이면 입력 종료를 의미하므로 반복문을 종료합니다.
- combinations 리스트는 가능한 조합을 저장할 리스트입니다.
- generateCombinations 메서드를 호출하여 조합을 생성합니다.
- generateCombinations 메서드는 재귀적으로 조합을 생성하는 역할을 수행합니다.
- 메서드에는 다음 인자들이 전달됩니다.
- combinations: 조합을 저장할 리스트
- currentCombination: 현재까지 만들어진 조합을 저장할 리스트
- lst: 입력으로 받은 숫자들의 배열
- start: 조합 생성을 시작할 인덱스
- generateCombinations 메서드에서는 다음과 같은 작업을 수행합니다.
- currentCombination의 크기가 6이 되면, 즉 6개의 숫자로 이루어진 조합이 완성되면 combinations 리스트에 추가합니다.
- start부터 배열의 끝까지 반복하면서 숫자를 하나씩 추가하고, 재귀 호출을 통해 다음 숫자를 선택합니다.
- 재귀 호출이 끝나면 현재 선택한 숫자를 제거하여 다른 조합을 생성합니다.
- main 메서드에서는 생성된 조합을 출력합니다. 각 조합은 리스트로 표현되며, 리스트의 요소를 순서대로 출력합니다.
자바스크립트
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', (input) => {
const cnt = parseInt(input);
if (cnt === 0) {
rl.close();
return;
}
const lst = input.split(' ').map(Number);
const combinations = [];
generateCombinations(combinations, [], lst, 0);
for (const combination of combinations) {
console.log(combination.join(' '));
}
console.log();
});
function generateCombinations(combinations, currentCombination, lst, start) {
if (currentCombination.length === 6) {
combinations.push([...currentCombination]);
return;
}
for (let i = start; i < lst.length; i++) {
currentCombination.push(lst[i]);
generateCombinations(combinations, currentCombination, lst, i + 1);
currentCombination.pop();
}
}
파이썬
def generate_combinations(combinations, current_combination, lst, start):
if len(current_combination) == 6:
combinations.append(list(current_combination))
return
for i in range(start, len(lst)):
current_combination.append(lst[i])
generate_combinations(combinations, current_combination, lst, i + 1)
current_combination.pop()
while True:
cnt = int(input())
if cnt == 0:
break
lst = list(map(int, input().split()))
combinations = []
generate_combinations(combinations, [], lst, 0)
for combination in combinations:
print(*combination)
print()