프로그래밍/백준 문제풀이
백준 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");
}
}