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