๐Ÿ” ๋ฐฑ์ค€ 15655๋ฒˆ - N๊ณผ M (6)

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

๐Ÿ” ๋ฐฑ์ค€ 15655๋ฒˆ - N๊ณผ M (6) | ์ˆœ์—ด vs ์กฐํ•ฉ ์ œ๋Œ€๋กœ ๊ตฌ๋ถ„ํ•˜์ž!

๋ฐฑ์ค€ ๋กœ๊ณ 


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

N๊ฐœ์˜ ์ž์—ฐ์ˆ˜ ์ค‘์—์„œ M๊ฐœ๋ฅผ ๊ณ ๋ฅด๋Š” ๋ชจ๋“  ์กฐํ•ฉ์„ ์ถœ๋ ฅํ•˜๋ผ.
๋‹จ, ์ˆซ์ž๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์ฃผ์–ด์ง€๋ฉฐ,
์ถœ๋ ฅ ์—ญ์‹œ ์‚ฌ์ „ ์ˆœ์ด์–ด์•ผ ํ•œ๋‹ค.

alt


๐ŸŽฏ ์ž…๋ ฅ ์˜ˆ์‹œ

4 2
9 8 7 1

์ •๋ ฌ๋œ ์ˆ˜์—ด: 1 7 8 9


๐Ÿง  ๋ฌธ์ œ์˜ ํ•ต์‹ฌ

  • โ— ๊ฐ™์€ ์ˆ˜๋Š” ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ (์ค‘๋ณต X)
  • โœ… ์„ ํƒํ•œ ์ˆ˜์—ด์€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด์•ผ ํ•จ
  • โœ… ์ฆ‰, ์กฐํ•ฉ(Combination) ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค!

โœ… ์ •๋‹ต ํ’€์ด: start ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•œ ์กฐํ•ฉ ๋ฐฉ์‹

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

public class Back_15655 {

    static int N, M;
    static int[] input, 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 + 1, depth + 1); // ์˜ค๋ฆ„์ฐจ์ˆœ ์œ ์ง€
        }
    }
}

๐Ÿ”Ž ์ฝ”๋“œ ๋ถ„์„

๋ถ€๋ถ„ ์„ค๋ช…
Arrays.sort(input) ์‚ฌ์ „์ˆœ ์ถœ๋ ฅ์„ ์œ„ํ•œ ์ •๋ ฌ
dfs(start, depth) start๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•ด์„œ ์˜ค๋ฆ„์ฐจ์ˆœ ์œ ์ง€
dfs(i + 1, depth + 1) ๋‹ค์Œ ํƒ์ƒ‰์€ ํ˜„์žฌ๋ณด๋‹ค ์˜ค๋ฅธ์ชฝ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ
output[] ํ˜„์žฌ๊นŒ์ง€ ๋ฝ‘์€ ์กฐํ•ฉ ๊ฒฐ๊ณผ ์ €์žฅ ๋ฐฐ์—ด
depth == M M๊ฐœ๋ฅผ ๋‹ค ๋ฝ‘์•˜์„ ๋•Œ ์ถœ๋ ฅ

๐Ÿ’ก ์ˆœ์—ด๊ณผ ์กฐํ•ฉ ์ฐจ์ด ๋‹ค์‹œ ๋ณด๊ธฐ

๊ตฌ๋ถ„ ์ˆœ์—ด (Permutation) ์กฐํ•ฉ (Combination)
์ˆœ์„œ โœ… ์ค‘์š” โŒ ์ค‘์š”ํ•˜์ง€ ์•Š์Œ
์ค‘๋ณต ์—ฌ๋ถ€ ๋ฌธ์ œ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„ ์ค‘๋ณต ์—†์ด ๊ณ ๋ฆ„
๋กœ์ง visited ์‚ฌ์šฉ start index ์‚ฌ์šฉ
์˜ˆ์‹œ 1 2 2 1 ๋ชจ๋‘ ์ถœ๋ ฅ 1 2 ๋งŒ ์ถœ๋ ฅ

โœ… ์ถœ๋ ฅ ์˜ˆ์‹œ

์ž…๋ ฅ:

4 2
9 8 7 1

์ถœ๋ ฅ:

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

๐Ÿง  ๋งˆ๋ฌด๋ฆฌ ์ •๋ฆฌ

ํ•ต์‹ฌ ํฌ์ธํŠธ ์„ค๋ช…
์กฐํ•ฉ ๋ฌธ์ œ ์ˆœ์„œ ์ค‘์š” X, ์˜ค๋ฆ„์ฐจ์ˆœ ์œ ์ง€
DFS + start ์ธ๋ฑ์Šค ์ค‘๋ณต ๋ฐฉ์ง€ ๋ฐ ์ •๋ ฌ ์œ ์ง€์— ์ ํ•ฉ
visited ๋ฐฐ์—ด โŒ ์ˆœ์—ด์—์„œ๋งŒ ์‚ฌ์šฉ (์ด ๋ฌธ์ œ์—” ํ•„์š” ์—†์Œ)

ํƒœ๊ทธ: , , , , , , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

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