๐ŸŒฒ ๋ฐฑ์ค€ 15657๋ฒˆ - DFS ํŠธ๋ฆฌ๋กœ ์ดํ•ดํ•˜๋Š” ์ค‘๋ณต ์กฐํ•ฉ (N๊ณผ M 8)

์—…๋ฐ์ดํŠธ:
2 ๋ถ„ ์†Œ์š”

๐ŸŒฒ ๋ฐฑ์ค€ 15657๋ฒˆ - DFS ํŠธ๋ฆฌ๋กœ ์ดํ•ดํ•˜๋Š” ์ค‘๋ณต ์กฐํ•ฉ (N๊ณผ M 8)

๐Ÿ”— ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ - ๋ฐฑ์ค€ 15657๋ฒˆ
๋ฐฑ์ค€ ๋กœ๊ณ 


๐Ÿ“Œ ๋ฌธ์ œ ์š”์•ฝ

  • N๊ฐœ์˜ ์ž์—ฐ์ˆ˜ ์ค‘์—์„œ M๊ฐœ๋ฅผ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์—ฌ ๊ณ ๋ฅธ ์ˆ˜์—ด์„ ์ถœ๋ ฅ
  • ์ถœ๋ ฅ์€ ์‚ฌ์ „ ์ˆœ(์˜ค๋ฆ„์ฐจ์ˆœ)์œผ๋กœ ์ •๋ ฌ๋˜์–ด์•ผ ํ•จ
  • ์ฆ‰, ์ค‘๋ณต ์กฐํ•ฉ + ์ •๋ ฌ

alt


โœ… ์˜ˆ์ œ ์ž…๋ ฅ

4 2
9 8 7 1

์ •๋ ฌ ํ›„: 1 7 8 9
์ฆ‰, input = [1, 7, 8, 9], M = 2


๐Ÿงฉ ์ „์ฒด ์ฝ”๋“œ (Java)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Back_15657 {

    static int N, M;
    static int[] input;
    static int[] output;

    static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());

        input = new int[N];
        output = new int[M];

        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            input[i] = Integer.parseInt(st.nextToken());
        }

        Arrays.sort(input); // ์‚ฌ์ „์ˆœ ์ถœ๋ ฅ์„ ์œ„ํ•ด ์ •๋ ฌ
        dfs(0, 0);
        System.out.print(sb);
    }

    private static void dfs(int start, int depth) {
        if (depth == M) {
            for (int i = 0; i < M; i++) {
                sb.append(output[i]).append(" ");
            }
            sb.append('\n');
            return;
        }

        for (int i = start; i < N; i++) {
            output[depth] = input[i];
            dfs(i, depth + 1); // ์ค‘๋ณต ํ—ˆ์šฉ
        }
    }
}

๐ŸŒฒ DFS ํŠธ๋ฆฌ ํ๋ฆ„ ๊ตฌ์กฐ (depth = 0 โ†’ M๊นŒ์ง€)

depth = 0
โ”œโ”€โ”€ 1 โ†’ dfs(0, 1)
โ”‚   โ”œโ”€โ”€ 1 โ†’ dfs(0, 2) โ†’ ์ถœ๋ ฅ: 1 1
โ”‚   โ”œโ”€โ”€ 7 โ†’ dfs(1, 2) โ†’ ์ถœ๋ ฅ: 1 7
โ”‚   โ”œโ”€โ”€ 8 โ†’ dfs(2, 2) โ†’ ์ถœ๋ ฅ: 1 8
โ”‚   โ”œโ”€โ”€ 9 โ†’ dfs(3, 2) โ†’ ์ถœ๋ ฅ: 1 9
โ”œโ”€โ”€ 7 โ†’ dfs(1, 1)
โ”‚   โ”œโ”€โ”€ 7 โ†’ dfs(1, 2) โ†’ ์ถœ๋ ฅ: 7 7
โ”‚   โ”œโ”€โ”€ 8 โ†’ dfs(2, 2) โ†’ ์ถœ๋ ฅ: 7 8
โ”‚   โ”œโ”€โ”€ 9 โ†’ dfs(3, 2) โ†’ ์ถœ๋ ฅ: 7 9
โ”œโ”€โ”€ 8 โ†’ dfs(2, 1)
โ”‚   โ”œโ”€โ”€ 8 โ†’ dfs(2, 2) โ†’ ์ถœ๋ ฅ: 8 8
โ”‚   โ”œโ”€โ”€ 9 โ†’ dfs(3, 2) โ†’ ์ถœ๋ ฅ: 8 9
โ”œโ”€โ”€ 9 โ†’ dfs(3, 1)
    โ”œโ”€โ”€ 9 โ†’ dfs(3, 2) โ†’ ์ถœ๋ ฅ: 9 9

โœ… ์ถœ๋ ฅ ๊ฒฐ๊ณผ

1 1
1 7
1 8
1 9
7 7
7 8
7 9
8 8
8 9
9 9

๐Ÿ” ํ๋ฆ„ ์„ค๋ช…

  • dfs(start, depth)
    • start๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ ์œ ์ง€๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ
    • depth๋Š” ํ˜„์žฌ๊นŒ์ง€ ์„ ํƒํ•œ ์ˆซ์ž์˜ ๊ฐœ์ˆ˜
  • dfs(i, depth + 1)
    • ์ค‘๋ณต ํ—ˆ์šฉ์ด๋ฏ€๋กœ ํ˜„์žฌ i๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ ๊ฐ€๋Šฅ

๐Ÿ’ก ํ•ต์‹ฌ ์š”์•ฝ

์š”์†Œ ์„ค๋ช…
์ค‘๋ณต ํ—ˆ์šฉ โœ… dfs(i, ...) ํ˜ธ์ถœ
์˜ค๋ฆ„์ฐจ์ˆœ ์œ ์ง€ โœ… i = start๋ถ€ํ„ฐ ํƒ์ƒ‰
visited ๋ฐฐ์—ด โŒ ํ•„์š” ์—†์Œ
์ถœ๋ ฅ ์‹œ์  depth == M์ผ ๋•Œ

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ