알고리즘 공부

[알고리즘] 순열과 조합

pa_songsong 2022. 5. 21. 19:02

순열과 조합 코드 정리 

import java.io.*;
import java.util.*;

class Solution {
    static int[] arr = { 2, 3, 4, 5 };
    static int cnt;

    static int n = arr.length;
    static int m = 2;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = 3;// arr개 중에 n개 뽑기
        int[] tmp = new int[N];
        boolean[] visit = new boolean[arr.length];
        // 순열
        System.out.println("순열");
        permutation(0, N, tmp, visit);

        // 조합
        // 4개 중 2개 뽑기
        System.out.println("조합");
        int[] comb = new int[m];
        combination(0, 0, comb);
    }

    private static void permutation(int cur, int N, int[] tmp, boolean[] visit) {
        if (cur == N) {
            System.out.println(Arrays.toString(tmp));
            return;
        }

        for (int i = 0; i < arr.length; i++) {
            if (!visit[i]) {
                visit[i] = true;
                tmp[cur] = arr[i];
                permutation(cur + 1, N, tmp, visit);
                visit[i] = false;
            }
        }
    }

    private static void combination(int cnt, int s, int[] comb) {
        if (cnt == m) {
            System.out.println(Arrays.toString(comb));
            return;
        }

        for (int i = s; i < n; i++) {
            comb[cnt] = arr[i];
            combination(cnt + 1, i + 1, comb);// i+1 이다 !!!!
        }
    }
}