๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[DFS] 6. ์ˆœ์—ด ๊ตฌํ•˜๊ธฐ

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 2. 24.

<<ํ’€์ด>>

์ˆœ์—ด : ์„œ๋กœ ๋‹ค๋ฅธ n ๊ฐœ ์ค‘ r๊ฐœ๋ฅผ ๊ณจ๋ผ ์ˆœ์„œ๋ฅผ ์ •ํ•ด ๋‚˜์—ดํ•˜๋Š” ๊ฐ€์ง“์ˆ˜

 

ํ”ํžˆ ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ nPr ์ด๋ ‡๊ฒŒ ํ•ด์„œ ํ’€์–ด ์™”์—ˆ๋‹ค. ์ด๋ฅผ ์ฝ”๋“œ๋กœ ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋กœ ๋˜๋Š”๋ฐ

์ด๋•Œ DFS๋ฅผ ์ด์šฉํ•ด์„œ ๊ตฌํ•˜๋ฉด ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์ด์ „ ๋ถ€ํ„ฐ ํ•ด์˜ค๋˜ ch๋ฅผ ํ†ตํ•ด ์ค‘๋ณต๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์ œ์™ธ์‹œ์ผœ์ค€๋‹ค.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;

class Main {
    static int n, m;
    static int[] brr, answer, ch;

    private void DFS(int L) {
        if (L == m) {
            for(int x : answer) {
                System.out.print(x + " ");
            }
            System.out.println();
        } else {
            for(int a : brr) {
                if (ch[a] == 0) {
                    ch[a] = 1;
                    answer[L] = a;
                    DFS(L + 1);
                    ch[a] = 0;
                }
            }
        }

    }

    public static void main(String[] args) throws Exception{
        Main T = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] arr = br.readLine().split(" ");
        n = Integer.parseInt(arr[0]);
        m = Integer.parseInt(arr[1]);

        brr = Arrays.asList(br.readLine().split(" "))
                .stream()
                .mapToInt(Integer::parseInt)
                .toArray();
        answer = new int[m];
        ch = new int[100];
        T.DFS(0);
    }
}

๋Œ“๊ธ€