๐ฒ ๋ฐฑ์ค 15657๋ฒ - DFS ํธ๋ฆฌ๋ก ์ดํดํ๋ ์ค๋ณต ์กฐํฉ (N๊ณผ M 8)
๐ฒ ๋ฐฑ์ค 15657๋ฒ - DFS ํธ๋ฆฌ๋ก ์ดํดํ๋ ์ค๋ณต ์กฐํฉ (N๊ณผ M 8)
๐ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ - ๋ฐฑ์ค 15657๋ฒ
๐ ๋ฌธ์ ์์ฝ
- N๊ฐ์ ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ์ค๋ณต์ ํ์ฉํ์ฌ ๊ณ ๋ฅธ ์์ด์ ์ถ๋ ฅ
- ์ถ๋ ฅ์ ์ฌ์ ์(์ค๋ฆ์ฐจ์)์ผ๋ก ์ ๋ ฌ๋์ด์ผ ํจ
- ์ฆ, ์ค๋ณต ์กฐํฉ + ์ ๋ ฌ
โ ์์ ์ ๋ ฅ
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 ์ผ ๋ |
๋๊ธ๋จ๊ธฐ๊ธฐ