Algorithm/Algorithm

순열 (Permuation)

Jyuni 2023. 2. 14. 22:10

순열

순열은 서로 다른 n개의 값 중에서 r개의 숫자를 뽑는 경우의 수를 의미한다.

static int K;
static int[] arr, result;
static boolean[] visited;

// 순열
public static void main(String[] args) {
    arr = new int[]{1, 2, 3};
    K = 2;   // 뽑는 개수
    result = new int[K];
    visited = new boolean[arr.length];   //배열의 개수만큼 초기화
    permutation(0);
}

public static void permutation(int cnt) {
    if (cnt == K) {
        System.out.println(Arrays.toString(result));
        return;
    }
    for (int i = 0; i < arr.length; i++) {
        if (!visited[i]) {
            visited[i] = true;
            result[cnt] = arr[i];
            permutation(cnt + 1);
            visited[i] = false;
        }
    }
}

/* 출력
[1, 2]
[1, 3]
[2, 1]
[2, 3]
[3, 1]
[3, 2]
 */

중복 순열

중복 순열은 서로 다른 n개의 값 중에서 중복이 가능하게 r개의 숫자를 뽑는 경우의 수를 의미한다.

static int K;
static int[] arr, result;

// 순열
public static void main(String[] args) {
    arr = new int[]{1, 2, 3};
    K = 2;   // 뽑는 개수
    result = new int[K];
    permutation(0);
}

public static void permutation(int cnt) {
    if (cnt == K) {
        System.out.println(Arrays.toString(result));
        return;
    }
    for (int i = 0; i < arr.length; i++) {
        result[cnt] = arr[i];
        permutation(cnt + 1);
    }
}

/* 출력
[1, 1]
[1, 2]
[1, 3]
[2, 1]
[2, 2]
[2, 3]
[3, 1]
[3, 2]
[3, 3]
 */