알고리즘/백준 문제풀이
[백준 JAVA] 6603 로또
새싹감자
2022. 9. 6. 02:29
문제
6603번: 로또
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로
www.acmicpc.net


숫자 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);
}
}
}