공부한것들을 정리하는 블로그 입니다.
순열 Permutation (Java) 2가지 방법(swap, visited) 본문
반응형
1. Swap 을 이용한 순열
// 순서 없이 n 개중에서 r 개를 뽑는 경우
// perm(arr, 0, n, r);
static void perm(int[] arr, int depth, int n, int r) {
if (depth == r) {
print(arr, r);
return;
}
for (int i=depth; i<n; i++) {
swap(arr, depth, i);
perm(arr, depth + 1, n, r);
swap(arr, depth, i);
}
}
static void swap(int[] arr, int depth, int i) {
int temp = arr[depth];
arr[depth] = arr[i];
arr[i] = temp;
}
2. Visited 배열을 이용한 순열
// 순서를 지키면서 n 개중에서 r 개를 뽑는 경우
// perm(arr, output, visited, 0, n, r);
static void perm(int[] arr, int[] output, boolean[] visited, int depth, int n, int r) {
if (depth == r) {
print(output, r);
return;
}
for (int i=0; i<n; i++) {
if (!visited[i]) {
visited[i] = true;
output[depth] = arr[i];
perm(arr, output, visited, depth + 1, n, r);
visited[i] = false;;
}
}
}
출처 : https://bcp0109.tistory.com/m/14
반응형
'알고리즘 > 백준 - 이론 공부' 카테고리의 다른 글
알고리즘 유형(판단 기준 팁) (0) | 2022.07.19 |
---|---|
깊이우선탐색(DFS)와 너비우선탐색(BFS) (0) | 2022.05.18 |
Java 입출력과 시간 복잡도, 입/출력 시간 비교 (0) | 2022.05.16 |
브루트 포스 - 경우의 수 (0) | 2022.04.26 |
브루트 포스(Brute Force) (0) | 2022.04.26 |
알고리즘 문제 추천 50문제 (0) | 2022.03.29 |
Comments