문제 설명
이전에 순열은 순서가 있지만 중복은 허용하지 않았다. 중복을 허용하지 않았다는 말은 자기 자신을 포함하지 않았다는 말을 의미한다.
ex) [1, 1] [2, 2] [3, 3]......
중복 순열을 구현할 땐 단지 이전에 구현하였던 순열에 방문 노드 로직만 제거하면 된다.
public class Problem_15649 {
private static int n;
private static int m;
private static boolean[] visited;
private static int[] arr;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
m = scanner.nextInt();
visited = new boolean[n+1];
arr = new int[m];
dfs(0);
}
private static void dfs(int depth) {
if (depth == m) {
for (int i = 0; i < m; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
return;
}
for (int i = 1; i <= n; i++) {
if (!visited[i]) {
arr[depth] = i;
visited[i] = true;
dfs(depth + 1);
visited[i] = false;
}
}
}
}
Code Link
'CS > Algorithm' 카테고리의 다른 글
(알고리즘) boj - 뱀 (3190) (0) | 2020.10.22 |
---|---|
(알고리즘) N과 M (4) - 중복조합 (0) | 2020.10.21 |
(알고리즘) N과 M (2) - 조합 (0) | 2020.10.21 |
(알고리즘) N과 M (1) - 순열 (0) | 2020.10.20 |
(알고리즘) 순열과 조합의 차이 (0) | 2020.10.20 |