smooth waters run deep

1d-1c/BOJ

6603_로또 (JAVA)

yeon_11 2020. 11. 28. 15:45
 

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