본문 바로가기
알고리즘/백준 문제풀이

[백준 JAVA] 6603 로또

by 새싹감자 2022. 9. 6.

문제


6603번: 로또 (acmicpc.net)

 

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

}

'알고리즘 > 백준 문제풀이' 카테고리의 다른 글

[백준 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

댓글