개발 블로그

백준 6603: 로또(JAVA) 본문

프로그래밍/백준 문제풀이

백준 6603: 로또(JAVA)

갹둥 2022. 11. 30. 13:49

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

 

6603번: 로또

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

www.acmicpc.net

조합 알고리즘을 이용하면 간단하게 풀 수 있는 문제다. 

import java.util.*;
public class Main {

	static StringBuilder sb = new StringBuilder();
	public static void main(String[] args){
		int n;
		int[] arr = new int[14];
		boolean[] visited = new boolean[14];
		Scanner sc = new Scanner(System.in);
		
		do{
			n=sc.nextInt();
			if(n==0) break;
			
			for(int i=0; i<n; i++) {
				arr[i] = sc.nextInt();
			}
		
			combination(arr, visited, 0, n, 6);
			sb.append("\n");
		}while(true);
		
		System.out.println(sb);
	}

	static void combination(int[] arr, boolean[] visited, int start, int n, int r) {
        if (r == 0) {
            print(arr, visited, n);
            return;
        }

        for (int i = start; i < n; i++) {
            visited[i] = true;
            combination(arr, visited, i + 1, n, r - 1);
            visited[i] = false;
        }
    }

    // 배열 출력
    static void print(int[] arr, boolean[] visited, int n) {

        for (int i = 0; i < n; i++) {
            if (visited[i]) {
                sb.append(arr[i]+" ");
            }
        }
       sb.append("\n");
    }
}