Skip to content

Commit 4fef379

Browse files
committed
[Silver II] Title: 로또, Time: 112 ms, Memory: 14132 KB -BaekjoonHub
1 parent c7e4e7b commit 4fef379

File tree

2 files changed

+93
-0
lines changed

2 files changed

+93
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# [Silver II] 로또 - 6603
2+
3+
[문제 링크](https://www.acmicpc.net/problem/6603)
4+
5+
### 성능 요약
6+
7+
메모리: 14132 KB, 시간: 112 ms
8+
9+
### 분류
10+
11+
백트래킹, 조합론, 수학, 재귀
12+
13+
### 제출 일자
14+
15+
2024년 11월 14일 14:03:33
16+
17+
### 문제 설명
18+
19+
<p>독일 로또는 {1, 2, ..., 49}에서 수 6개를 고른다.</p>
20+
21+
<p>로또 번호를 선택하는데 사용되는 가장 유명한 전략은 49가지 수 중 k(k>6)개의 수를 골라 집합 S를 만든 다음 그 수만 가지고 번호를 선택하는 것이다.</p>
22+
23+
<p>예를 들어, 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,3,5,13,21], ..., [3,5,8,13,21,34])</p>
24+
25+
<p>집합 S와 k가 주어졌을 때, 수를 고르는 모든 방법을 구하는 프로그램을 작성하시오.</p>
26+
27+
### 입력
28+
29+
<p>입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로 주어진다.</p>
30+
31+
<p>입력의 마지막 줄에는 0이 하나 주어진다. </p>
32+
33+
### 출력
34+
35+
<p>각 테스트 케이스마다 수를 고르는 모든 방법을 출력한다. 이때, 사전 순으로 출력한다.</p>
36+
37+
<p>각 테스트 케이스 사이에는 빈 줄을 하나 출력한다.</p>
38+
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import java.util.*;
2+
import java.io.*;
3+
4+
public class Main {
5+
static StringBuilder sb = new StringBuilder();
6+
static int result[];
7+
static boolean visited[];
8+
static int arr[];
9+
static int input;
10+
public static void main(String[] args) throws IOException {
11+
12+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
13+
14+
StringTokenizer st;
15+
16+
while(true){
17+
st = new StringTokenizer(br.readLine());
18+
input = Integer.parseInt(st.nextToken());
19+
20+
if(input == 0)
21+
break;
22+
23+
arr = new int[input];
24+
visited= new boolean[input];
25+
result = new int[6];
26+
for(int i =0; i<input; i++) {
27+
arr[i] = Integer.parseInt(st.nextToken());
28+
}
29+
dfs(0,0);
30+
sb.append("\n");
31+
}
32+
System.out.println(sb);
33+
}
34+
35+
static void dfs(int cur, int depth) {
36+
if(depth ==6) {
37+
for(int val : result) {
38+
sb.append(val).append(" ");
39+
}
40+
sb.append("\n");
41+
return;
42+
}
43+
44+
for(int i = cur; i<input; i++) {
45+
if(visited[i]==false) {
46+
visited[i] = true;
47+
result[depth]= arr[i];
48+
dfs(i, depth+1);
49+
visited[i]= false;
50+
}
51+
}
52+
53+
}
54+
55+
}

0 commit comments

Comments
 (0)