오늘 풀어본 문제는 ⭐로또 이다.
해당 문제는 조합론 공부를 위해 풀어보았다.
이 문제의 중요점은 다음과 같다.
처음에는 아무생각없이 순열 만드듯이 하다가 틀렸다는 걸 깨달았다.
어렵지 않으니 까먹을 때 마다 자주봐두자
import java.io.*;
import java.util.*;
public class Main {
static int K;
static int[] ARR;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
StringTokenizer st = new StringTokenizer(br.readLine());
K = Integer.parseInt(st.nextToken());
if (K == 0) break;
ARR = new int[K];
for (int i = 0; i < K; i++) ARR[i] = Integer.parseInt(st.nextToken());
Arrays.sort(ARR);
johap(0, 0, new StringBuilder());
System.out.println();
}
}
static void johap(int start, int depth, StringBuilder sb) {
if (depth == 6) {
System.out.println(sb.toString().trim());
return;
}
for (int i = start; i < K; i++) {
int len = sb.length();
sb.append(ARR[i]).append(' ');
johap(i + 1, depth + 1, sb);
sb.setLength(len); // 백트래킹(원복)
}
}
}
sb.setLength(len); // 백트래킹(원복)
StringBuilder는 자주 쓰니까, 해당 함수 정도는 기억해두자!