BOJ 15666: N과 M (12) https://www.acmicpc.net/problem/15666
arr
을 오름차순으로 정렬한 뒤 dfs 함수를 실행한다.dfs
에 start
변수와 depth
변수를 넣는다.import java.util.*;
import java.io.*;
public class Main {
static int N, M;
static int[] arr, printArr;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException{
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
M = sc.nextInt();
arr = new int[N];
printArr = new int[M];
for(int i=0; i<N; i++) {
arr[i] = sc.nextInt();
}
Arrays.sort(arr);
dfs(0, 0);
System.out.println(sb);
}
static void dfs(int start, int depth) {
if(depth == M) {
for(int i=0; i<M; i++) {
sb.append(printArr[i]).append(" ");
}
sb.append("\n");
return;
}
int before = -1;
for(int i=start; i<N; i++) {
int now = arr[i];
if(before != now) {
before = now;
printArr[depth] = arr[i];
dfs(i, depth + 1);
}
}
}
}
dfs(i + 1, depth + 1)
을 하면 자기 자신을 포함하지 않는다.dfs(i, depth + 1
을 해야 자기 자신을 포함하여 재귀 호출을 한다.