백준 - 6603번 로또

greenTea·2023년 6월 12일
0

코드

public class Main {

    static boolean[] check;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        while (true) {
            st = new StringTokenizer(br.readLine());

            int num = Integer.parseInt(st.nextToken());
            if (num == 0)
                break;

            String[] arr = new String[num];
            for (int i = 0; i < num; i++) {
                arr[i] = st.nextToken();
            }

            check = new boolean[num];
            combination(arr,0,0,"");
            System.out.println();
        }
    }

    static void combination(String[] arr,int depth,int start,String result) {

        if (depth == 6)
            System.out.println(result);

        for (int i = start; i < arr.length; i++) {
            if (!check[i]) {
                check[i] =true;
                combination(arr,depth+1,i+1,result + arr[i]+" ");
                check[i]=false;
            }
        }
    }
}

🧐백트랙킹을 이용하여 푼 문제입니다.
여기서 combination 함수 안 for문의 시작 부분을 어떻게 정의 하냐에 따라 풀이 방법이 달라지는데 여기서는 check배열을 통해 이미 사용한 수를 사용하지 못하도록 하였습니다. start인수는 숫자를 오름차순으로 정렬하기 위해 시작 위치를 조절하기 위해 사용하였습니다.

출처 : 백준 - 로또

profile
greenTea입니다.

0개의 댓글