알고리즘/JAVA

Recursion: 백준 로또-6603

문괜 2024. 8. 27. 12:00
반응형

문제 유형

Recursion

작성 코드

import java.util.Scanner;

public class Main {
    static StringBuilder answer;
    static int N;
    static int M;

    static String[] givenNums;
    static String[] row;

    static boolean[] checks;
    public static void recursive(int depth, int index) {
        if (depth == M) {
            for (String element : row) {
                answer.append(element).append(" ");
            }
            answer.append("\n");
            return;
        }

        for (int i = index; i < givenNums.length; i++) {
            if (!checks[i]) {
                checks[i] = true;
                row[depth] = givenNums[i];
                recursive(depth+1, i);
                checks[i] = false;
            }
        }
    }
    public static void input() {
        Scanner sc = new Scanner(System.in);
        N = -1;
        M = 6;
        while (N != 0) {
            String[] temp = sc.nextLine().split(" ");

            givenNums = new String[temp.length - 1];
            checks = new boolean[temp.length - 1];
            System.arraycopy(temp, 1, givenNums, 0, givenNums.length);
            row = new String[M];

            answer = new StringBuilder();
            N = Integer.parseInt(temp[0]);
            recursive(0, 0);
            System.out.println(answer);
            answer.setLength(0);
        }

    }
    public static void main(String[] args) {
        input();
    }
}

접근 방식

1. 주어진 수열에서 6개의 중복되지 않는 조합을 생성해서 출력해야한다.

2. 그래서 중복을 방지하는 Checks를 이용해 하나의 조합안에서의 중복방지와 Index를 만들 전체 조합에서의 중복방지를 진행했다.

개선 사항

솔직히 없다.

반응형