관리 메뉴

공부한것들을 정리하는 블로그 입니다.

순열 Permutation (Java) 2가지 방법(swap, visited) 본문

알고리즘/백준 - 이론 공부

순열 Permutation (Java) 2가지 방법(swap, visited)

호 두 2022. 10. 21. 10:18
반응형

 

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

 

순열 Permutation (Java)

순열 연습 문제 순열이란 n  개의 값 중에서 r  개의 숫자를 모든 순서대로 뽑는 경우를 말합니다. 예를 들어 [1, 2, 3]  이라는 3 개의 배열에서 2 개의 숫자를 뽑는 경우는 [1, 2] [1, 3] [2, 1] [2, 3] [3,

bcp0109.tistory.com

 

반응형
Comments