1. 순열의 개념 (Permutation)

순열은 서로 다른 n개의 원소 중에서 r개를 순서를 고려하여 나열하는 경우

  • 순서가 중요하다.
  • 예: [1, 2, 3] 중 2개를 뽑는 경우
    → 가능한 순열: [1,2], [1,3], [2,1], [2,3], [3,1], [3,2]

 2. 순열 공식

nPr = n! / (n - r)!

  • !는 팩토리얼(factorial). 예: 4! = 4 × 3 × 2 × 1 = 24
  • 예: 3개 중 2개를 순서 있게 뽑는 경우
    → 3P2 = 3! / (3-2)! = 6

3. Java 코드로 예시

예제 1:  nPr 계산 (순열 공식으로 계산)

public class PermutationFormula {

    public static void main(String[] args) {
        int n = 5;
        int r = 3;
        int result = permutation(n, r);
        System.out.println(n + "P" + r + " = " + result);
    }

    static int permutation(int n, int r) {
        return factorial(n) / factorial(n - r);
    }

    static int factorial(int n) {
        int result = 1;
        for (int i = 2; i <= n; i++) {
            result *= i;
        }
        return result;
    }
}

실행 결과:

5P3 = 60

예제 2: 실제 순열을 출력하 (재귀/백트래킹)

public class PermutationPrint {

    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        boolean[] visited = new boolean[arr.length];
        int[] output = new int[2]; // 2개만 뽑는 경우

        permutation(arr, output, visited, 0, 2); // 3P2
    }

    static void permutation(int[] arr, int[] output, boolean[] visited, int depth, int r) {
        if (depth == r) {
            print(output, r);
            return;
        }

        for (int i = 0; i < arr.length; i++) {
            if (!visited[i]) {
                visited[i] = true;
                output[depth] = arr[i];
                permutation(arr, output, visited, depth + 1, r);
                visited[i] = false; // 백트래킹
            }
        }
    }

    static void print(int[] arr, int r) {
        for (int i = 0; i < r; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }
}

 

실행결과

1 2 
1 3 
2 1 
2 3 
3 1 
3 2

'코딩테스트' 카테고리의 다른 글

Combination(조합)  (0) 2025.04.08
순열(Permutation) 예제  (0) 2025.04.08
백준 11659번 - 구간 합 구하기  (0) 2025.04.07
백준 11382번 - 꼬마 정민  (0) 2025.04.07
백준 1000번 A+B  (0) 2025.04.07

+ Recent posts