백준 알고리즘/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();
    }
}