PS
[백준] 15666번 : N과 M (12)[Java]
devkdh
2025. 7. 8. 16:20

#풀이
import java.io.*;
import java.util.*;
public class Main {
static ArrayList<ArrayList<Integer>> list = new ArrayList<>();
static int[] arr;
static int[] ans;
static int M;
static StringBuilder sb = new StringBuilder();
static void dfs(int start, int depth){
if(depth==M){
for(int val:ans){
sb.append(val).append(" ");
}
sb.append("\n");
return;
}
for(int i = start; i<arr.length; i++){
ans[depth] = arr[i];
dfs(i,depth+1);
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N;
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
ans = new int[M];
TreeSet<Integer> set = new TreeSet<>();
st = new StringTokenizer(br.readLine());
for(int i = 0; i<N; i++){
set.add(Integer.parseInt(st.nextToken()));
}
arr = new int[set.size()];
int index = 0;
for(int n:set){
arr[index] = n;
index++;
}
dfs(0,0);
System.out.println(sb.toString());
}
}
#성능

#정리
조합을 구현하는 백트래킹 문제이다.
첫 제출 때 정렬을 깜빡해서 틀렸다.
TreeSet자료구조를 이용하여 정렬 및 중복 제거를 했다.