https://www.acmicpc.net/problem/15654
문제 풀이 접근
- 중복되는 수열을 여러 번 출력하면 안됨
- -> visited를 통해서 중복 체크 가능
- 수열은 사전 순으로 증가하는 순서로 출력
- -> arr 입력을 받고 나서 sorting 해주면 됨
- 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수
- visited 배열 크기를 10000으로 설정
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int m, n;
static int [] arr;
static int [] tmp = new int[10];
static boolean[] visited = new boolean[10000];
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
arr = new int[n];
st = new StringTokenizer(br.readLine());
for(int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
recur(0);
System.out.println(sb.toString());
}
private static void recur(int depth) {
if (depth == m) {
for(int i = 0; i < m; i++){
sb.append(tmp[i]).append(" ");
}
sb.append("\n");
return;
}
for(int i = 0; i < n; i++){
if (!visited[arr[i]]) {
visited[arr[i]] = true;
tmp[depth] = arr[i];
recur(depth + 1);
visited[arr[i]] = false;
}
}
}
}