백준 알고리즘/Java
[백준] 6603. 로또 - Java
리버🐦🔥
2025. 5. 30. 20:08
https://www.acmicpc.net/problem/6603
오늘도 재귀와 관련된 기본 문제를 풀어보았다.
⭐️ 중요 포인트
1. numbers에 46개 중 주어진 k개의 숫자를 미리 저장해둔다
2. 재귀함수를 돌면서 6개보다 작을때까지는 값을 selected에 하나씩 추가한다. 이 때, for문을 통해 index를 1씩 증가시켜가며 selected에 담아서 "사전식"으로 정렬하여 출력한다.
import java.util.*;
import java.io.*;
public class P6603 {
static BufferedReader br;
static BufferedWriter bw;
static int k;
static List<Integer> numbers;
static List<Integer> selected;
static void init() throws IOException {
br = new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new OutputStreamWriter(System.out));
}
static void solve() throws IOException {
while (true) {
StringTokenizer st = new StringTokenizer(br.readLine());
k = Integer.parseInt(st.nextToken());
if (k == 0) {
break;
}
numbers = new ArrayList<>();
selected = new ArrayList<>();
for (int i = 0; i < k; i++) {
numbers.add(Integer.parseInt(st.nextToken()));
}
recursion(0);
bw.newLine();
}
}
static void recursion(int index) throws IOException {
if (selected.size() >= 6) {
for (int i = 0; i < selected.size(); i++) {
bw.write(selected.get(i) + " ");
}
bw.newLine();
return;
}
for (int i = index; i < numbers.size(); i++) {
selected.add(numbers.get(i));
recursion(i + 1);
selected.remove(selected.size() - 1);
}
}
public static void main(String[] args) throws IOException {
init();
solve();
bw.flush();
bw.close();
br.close();
}
}