본문 바로가기

알고리즘

[BOJ] 6603번: 로또 (JAVA)

https://www.acmicpc.net/problem/6603

 

6603번: 로또

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로

www.acmicpc.net

import java.io.*;
import java.util.*;

public class Main {

    static int[] S;
    static int k;
    static int[] answer;
    static boolean[] visited;

    static void getNum(int x, int start){

        if(x==6){
            for(int i=0;i<6;i++){
                System.out.print(answer[i]+" ");
            }
            System.out.println();
            return;
        }

        for(int i=start;i<k;i++){
            answer[x]=S[i];
            getNum(x+1, i+1);
        }
    }

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        answer = new int[6];

        while(true){
            st = new StringTokenizer(br.readLine());
            k = Integer.parseInt(st.nextToken());
            if(k==0){
                break;
            }
            S = new int[k];
            answer = new int[6];
            for(int i=0;i<k;i++){
                S[i] = Integer.parseInt(st.nextToken());
            }

            getNum(0,0);
            System.out.println();
        }
    }
}

1. 주어진 배열 S에서 숫자 6개를 중복되지 않게 고르면 된다. (순서 상관 없으므로 조합)