https://www.acmicpc.net/problem/6603
6603번: 로또
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로
www.acmicpc.net
문제
입력
출력
각 테스트 케이스마다 수를 고르는 모든 방법을 출력한다. 이때, 사전 순으로 출력한다.
각 테스트 케이스 사이에는 빈 줄을 하나 출력한다.
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int k;
static StringBuilder sb;
static int[] s;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
sb = new StringBuilder();
while (true) {
st = new StringTokenizer(br.readLine());
k = Integer.parseInt(st.nextToken());
if(k == 0) break;
s = new int[k + 1];
for (int i = 1; i <= k; i++) {
s[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(s);
backtrack(0, "", 0);
sb.append("\n");
}
System.out.println(sb);
}
static void backtrack(int cnt, String str, int pre) {
if (cnt == 6) {
sb.append(str.trim() + "\n");
return;
}
for (int i = pre + 1; i <= k; i++) {
backtrack(cnt + 1, str + " " + s[i], i);
}
}
}
해결방법
백 트래킹으로 풀 수 있는 문제이다.
로또 번호를 사전순으로 출력한다. 정렬을 해야 한다.
독알 로또는 수 6개를 사용한다. 로또 번호가 6개라면 Stringbuilder에 해당 문지열을 추가한다.
'알고리즘 > 백준' 카테고리의 다른 글
13975번 : 파일 합치기 3 (0) | 2023.09.21 |
---|---|
16987번 : 계란으로 계란치기 (0) | 2023.09.19 |
1759번 : 암호 만들기 (0) | 2023.09.17 |
15663번 : N과 M (9) (0) | 2023.09.14 |
2457번 : 공주님의 정원 (0) | 2023.09.13 |