import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
public class Main {
static List<List<Integer>> answer = new ArrayList<>();
static int[] temp;
static boolean[] visited;
public static void main(String[] args) throws IOException {
// 입력
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String input = bufferedReader.readLine();
StringTokenizer stringTokenizer = new StringTokenizer(input, " ");
int N = Integer.parseInt(stringTokenizer.nextToken());
int M = Integer.parseInt(stringTokenizer.nextToken());
temp = new int[N];
visited = new boolean[N];
dfs(N, M, 0);
for (List<Integer> items : answer) {
for (int item : items) {
System.out.print(item + " ");
}
System.out.println();
}
}
private static void dfs(int n, int m, int count) {
if (count == m) {
List<Integer> res = new ArrayList<>();
for (int item : temp) {
if (item != 0) {
res.add(item);
}
}
answer.add(res);
return;
}
for (int i = 0; i < n; i++) {
if (!visited[i]) {
visited[i] = true;
temp[count] = i+1;
dfs(n, m, count + 1);
visited[i] = false;
}
}
}
}
자바로 순열 문제
를 풀어봤다.
파이썬으로 풀면 평소같으면 바로 itertools permutation
써서 제출했겠지만, dfs
한땀한땀 만드는 것은 너무 익숙치 않았다.
**자바로 입력받는 법, 배열과 리스트 다루는 법에 더 익숙해져야겠다.