문제
숫자 0이 나올때까지 집합 원소가 k개만큼 주어지고, 이중에서 6개의 숫자를 고르는 문제이다.
뽑는 순서가 중요하지 않기 때문에 조합을 사용한다.
풀이방법
- 0이 나올때까지 숫자를 입력받는다.
- 입력받은 숫자를 num배열에 넣는다.
- 뽑은 숫자를 넣을 배열 result를 선언한다.
- start부터 k까지 for문을 돌려, result에 num에 있던 값을 넣어준다.
- 재귀호출을 시용해 뽑은 숫자 이후숫자부터 다시 숫자를 뽑아주게한다. 이때, 뽑은 숫자의 갯수를 세기 위해 cnt +1또한 인수로 넣어준다.
- cnt가 6이 된다면(숫자를 다 뽑았다면) 값을 출력해준다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main_6603_이서정 {
static int num[];
static int k;
static int result[];
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true) {
StringTokenizer st = new StringTokenizer(br.readLine());
k = Integer.parseInt(st.nextToken());
if(k==0) break;
num=new int[k];
for(int i=0; i<k; i++) {
num[i] = Integer.parseInt(st.nextToken());
}
result=new int[6];
comb(0,0);
System.out.println();
}
}
static void comb(int start, int cnt) {
if(cnt==6) {
for(int i=0; i<6; i++) {
System.out.print(result[i]+" ");
}
System.out.println();
return;
}
for(int i=start; i<k; i++) {
result[cnt]=num[i];
comb(i+1, cnt+1);
}
}
}
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[백준 JAVA]2636 치즈 (0) | 2022.09.15 |
---|---|
[백준 JAVA]13023 ABCDE (0) | 2022.09.12 |
[백준 JAVA & Python] 1260 DFS와 BFS (0) | 2022.09.12 |
[백준Java]2589 보물섬 (0) | 2022.09.12 |
[백준 JAVA]2206 벽 부수고 이동하기 (0) | 2022.09.12 |
댓글