๐ ๋ฐฑ์ค 15655๋ฒ - N๊ณผ M (6)
๐ ๋ฐฑ์ค 15655๋ฒ - N๊ณผ M (6) | ์์ด vs ์กฐํฉ ์ ๋๋ก ๊ตฌ๋ถํ์!

๐ ๋ฌธ์  ์์ฝ
N๊ฐ์ ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅด๋ ๋ชจ๋ ์กฐํฉ์ ์ถ๋ ฅํ๋ผ.
๋จ, ์ซ์๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์ฃผ์ด์ง๋ฉฐ,
์ถ๋ ฅ ์ญ์ ์ฌ์  ์์ด์ด์ผ ํ๋ค.

๐ฏ ์ ๋ ฅ ์์
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 22 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 ๋ฐฐ์ด โ | ์์ด์์๋ง ์ฌ์ฉ (์ด ๋ฌธ์ ์ ํ์ ์์) | 
๋๊ธ๋จ๊ธฐ๊ธฐ