본문 바로가기
알고리즘 이전/재귀, DFS, BFS, Tree, Graph

순열 구하기

by hoshi03 2023. 8. 24.

10이하의 N개의 자연수가 주어지면 이 중 M개를 뽑아 일렬로 나열하는 방법을 모두 출력

 

입력

3 2
3 6 9

 

출력

3 6
3 9
6 3
6 9
9 3
9 6

 

앞에 중복순열 뽑는것과 비슷하지만 ch배열을 이용해서 이미 사용한 것은 사용하지 않게 해준다

import java.util.*;


public class Main{
    static int n, m;
    static int[] arr, ch, res;
    public void dfs(int L) {
        if(L == m){
            for (int x : res) System.out.print(x + " ");
            System.out.println();
        }

        else {
            for (int i =0; i < n; i++){
                if (ch[i] == 0){
                    ch[i] = 1;
                    res[L] = arr[i];
                    dfs(L+1);
                    ch[i] = 0;
                }
            }
        }
    }

    public static void main(String args[]) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        m = in.nextInt();
        arr = new int[n];
        ch = new int[n];
        res = new int[m];
        for(int i = 0; i < n; i++) arr[i] = in.nextInt();
        T.dfs(0);

    }
}

 

 

'알고리즘 이전 > 재귀, DFS, BFS, Tree, Graph' 카테고리의 다른 글

조합 구하기  (0) 2023.08.25
수열 추측하기  (0) 2023.08.25
조합 구하기(메모리제이션)  (0) 2023.08.24
동전 교환  (0) 2023.08.24
DFS 중복순열  (0) 2023.08.24