접근 과정
1. 어떤 문제로 이해 했는가? 그리고 문제의 제약 조건은?
{1, 2, ..., 49}에서 수 6개를 고르는 로또에서 k개의 수를 골라 집합 S를 만들고, 이 수에서 고를 수 있는 로또의 방법을 모두 출력하는 문제
제약조건
- k (6 < k < 13)
- 시간제한 : 1초
- S는 오름차순으로 주어짐
- 입력의 마지막 줄은 0
2. 나의 방식대로 문제를 재정의 하자.
k개 중 6개를 고르는 조합을 완성하기
3. 어떤 알고리즘과 자료구조를 사용할 것인가?
재귀를 이용한 조합 구하기
4. 어떻게 계산할 것인가?
1) 입력
bufferedReader
StringBuilder
5. 주의할 점은 무엇인가?
순서는 고려하지 않음
6. 풀이 과정
import java.io.*;
import java.util.*;
public class q6603 {
static Integer[] S;
static boolean[] visited;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String[] str = br.readLine().split(" ");
Integer K = Integer.parseInt(str[0]);
S = new Integer[K];
visited = new boolean[K];
if (K.equals(0)) {
break;
}
for (int i = 0; i < K; i++) {
S[i] = Integer.parseInt(str[i + 1]);
}
combination(0,0, S.length);
sb.append('\n');
}
System.out.println(sb);
br.close();
}
static private void combination(Integer start, Integer dep, Integer n) {
if (dep == 6) {
for (int i = 0; i < n; i++) {
if (visited[i] == true) {
sb.append(S[i] + " ");
}
}
sb.append('\n');
return;
}
for (int i = start; i < n; i++) {
visited[i] = true;
combination(i + 1, dep + 1,n);
visited[i] = false;
}
}
}
7. 개선점
재귀식을 바로 생각하지 못했음
'코딩테스트' 카테고리의 다른 글
[백준 11951번] 태상이의 훈련소 생활 (0) | 2022.01.11 |
---|---|
[백준 11659번] 구간 합 구하기 4 (0) | 2022.01.10 |
[백준 7568번] 덩치 (0) | 2022.01.10 |
[백준 1921번] 정수 삼각형 (0) | 2021.07.12 |
[백준 11052번] 카드 구매하기 (0) | 2021.07.11 |