문제 : https://www.acmicpc.net/problem/6603

 

6603번: 로또

문제 독일 로또는 {1, 2, ..., 49}에서 수 6개를 고른다. 로또 번호를 선택하는데 사용되는 가장 유명한 전략은 49가지 수 중 k(k>6)개의 수를 골라 집합 S를 만든 다음 그 수만 가지고 번호를 선택하는 것이다. 예를 들어, k=8, S={1,2,3,5,8,13,21,34}인 경우 이 집합 S에서 수를 고를 수 있는 경우의 수는 총 28가지이다. ([1,2,3,5,8,13], [1,2,3,5,8,21], [1,2,3,5,8,34], [1,2

www.acmicpc.net

 

문제 요약 : 주어진 숫자를 6개 선택하여 오름차순으로 출력

입력 출력

7 ≤ k(숫자개수) ≤ 13

k = 1~49

마지막줄 0 입력

주어진 숫자를 6개 선택하여 오름차순 출력

 

JAVA

채점 번호 아이디 문제 번호 결과 메모리 시간 언어 코드 길이
16498532 cbkpar 6603 맞았습니다!! 14436KB 80ms Java 910B
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	
	static int[] arr = new int[13];
	static int[] s = new int[6];
	static StringBuilder sb = new StringBuilder();
	static int n;
	
	public static void main(String args[]) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int i;
		while(true) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			n = Integer.parseInt(st.nextToken());
			if(n==0) break; //0입력시 종료
			if(s[0]!=0) sb.append("\n");//첫번째가 아니라면 빈줄 추가
			for(i=0;i<n;i++) arr[i] = Integer.parseInt(st.nextToken());
			dfs(0,0);
		}	
		System.out.println(sb.toString());
	}
	static void dfs(int o, int k) {
		if(k==6) {//6개를 다 골랐다면 고른 숫자 출력 후 리턴
			for(int i=0;i<5;i++) sb.append(s[i]+" ");
			sb.append(s[5]+"\n");
			return;
		}
		for(int i=o;i<n;i++) {//순서대로 공을 고르는 과정
			s[k]=arr[i];
			dfs(i+1,k+1);
		}
	}
}

+ Recent posts