6603번: 로또
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로
www.acmicpc.net
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
while(true){
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
if(n==0)
break;
int[] num = new int[n];
int[] temp = new int[6];
for(int i=0; i<n; i++){
num[i] = Integer.parseInt(st.nextToken());
}
choose(num, temp, 0, 0);
sb.append('\n');
}
System.out.print(sb);
br.close();
}
private static void choose(int[] num, int[] temp, int num_idx, int temp_idx){
if(temp_idx == 6){
String str = "";
for(int i=0; i<temp.length; i++){
str += temp[i]+" ";
}
sb.append(str).append('\n');
return;
}
if(num_idx >= num.length)
return;
temp[temp_idx] = num[num_idx];
choose(num, temp, num_idx+1, temp_idx+1);
choose(num, temp, num_idx+1, temp_idx);
}
}
주어진 n개의 수 중에서 6개를 중복없이(자기 자신을 포함하지 않고), 순서 상관없이 뽑는 문제이다.
총 가짓수를 nC6으로 표현할 수 있고, 조합으로 구현했다.
** 조합 참고
조합 nCr
조합 : 순서X, 중복X ('중복'은 자기자신 포함 여부를 의미) 예) 1,2,3,4 중 2개 뽑는 경우 (1,2) (1,3) (1,4) (2,3) (2,4) (3,4) /* N : 총 숫자 개수(num.length) R : 숫자 중에서 뽑는 개수 (nCr에서 r을..
yeone2ee.tistory.com
'1d-1c > BOJ' 카테고리의 다른 글
14888_연산자 끼워넣기 (JAVA) (0) | 2020.11.29 |
---|---|
14501_퇴사 (JAVA) (0) | 2020.11.29 |
11723_집합 (JAVA) (0) | 2020.11.25 |
10972_다음 순열 & 10973_이전 순열 (JAVA) (0) | 2020.11.24 |
9095_1,2,3 더하기 (JAVA) (0) | 2020.11.24 |