
알고리즘 분류 : 백트레킹
난이도 : 실버2
출처 : 백준 - N과 M (11)



Set을 이용한 중복 제거를 후 ArrayList에 담아서 정렬한다.
정렬된 데이터를 제귀를 통해 오름차순으로 StringBuilder에 담아서 한번에 출력한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int[] arr;
static StringBuilder sb;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
arr = new int[M];
Set<Integer> set = new HashSet<>();
st = new StringTokenizer(br.readLine()," ");
for(int i=0;i<N;i++) {
set.add(Integer.parseInt(st.nextToken()));
}
ArrayList<Integer> arrayList = new ArrayList<>(set);
Collections.sort(arrayList);
req(0, M, arrayList);
System.out.print(sb);
}
private static void req(int depth, int m, ArrayList<Integer> arrayList) {
if(depth==m) {
for(int i=0;i<m;i++) {
sb.append(arr[i]).append(" ");
}
sb.append("\n");
return;
}
for(int i=0;i<arrayList.size();i++) {
arr[depth] = arrayList.get(i);
req(depth+1,m,arrayList);
}
}
}

Set, Arraylist등 적절히 자료구조를 사용해야겠다.