combination
๐โโ๏ธ ๋ค์ด๊ฐ๋ฉฐ
์กฐํฉ์ ๋ณผ๊น?
์๋ Java ์ฝ๋๋ back-tracking ๊ด์ ์์ ์ ๊ทผํ ํต์ฌ ํ์ด์ ๋๋ค. ์ ๋ ฅ ์กฐ๊ฑด๊ณผ ์๊ฐยท๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ํจ๊ป ๊ณ ๋ คํ์ฌ ๋ถํ์ํ ์ฐ์ฐ์ ์ค์ด๋ ๋ฐฉํฅ์ผ๋ก ์ค๊ณํ์ต๋๋ค.
1
2
n = 10
r = 5
์ ๊ตฌํ์ combination์ ์ ์ฝ ์กฐ๊ฑด์ ๋ง์กฑํ๋๋ก ์๋ฃ๊ตฌ์กฐ ์ ํ๊ณผ ๋ฐ๋ณต ๋ฒ์๋ฅผ ์ต์ ํํ ๊ฒฐ๊ณผ์ ๋๋ค.
${}{n}C{r}$ = 252
์ฌ๊ธฐ์ ์กฐํฉ์ ๊ตฌํํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค
- ๋ฐฑํธ๋ํน
- ๋น์ค๋ง์คํน
๊ทธ๋ฐ๋ฐ 2๊ฐ๋ ์ฐ์ฐํ์์ ์ฐจ์ด๊ฐ ์๋ค.
๋ฐฑํธ๋ํน์ ๊ฒฝ์ฐ 252๊ฐ์ง
๋นํธ๋ง์คํน์ $2^{10}$ -> 1024
๊ทธ๋์ ๋ฐฑํธ๋ํน ์กฐํฉ์ด ํจ์ฌ ๋ซ๋ค.
๋ฐฑํธ๋ํน ์กฐํฉ ์๋๋ฐฉ์
์ด๋ฐ์์ผ๋ก ์กฐํฉ์ ๊ฐฏ์๋ฅผ ๊ตฌํ๋ค.
โ ์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package boj;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.util.Arrays;
public class Main {
static int n;
static int r;
static int[] possible_code;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = 10;
r = 5;
possible_code = new int[r];
comb(1,0);
}
static void comb(int start, int depth) {
// ์ต๋ ๊น์ด ๋๋ฌ์
if (depth == r) {
System.out.println(Arrays.toString(possible_code));
return;
}
// ์์ง ๋ชป ๋๋ฌํ๋ค๋ฉด
for (int i = start; i < n+1; i++) {
possible_code[depth] = i;
comb(i+1, depth+1);
}
}
}
์ด ์ฝ๋๋ฅผ ๋ณด๊ณ ์ดํด๊ฐ ์๊ฐ๋ค๋ฉด ์๋ ๊ธ์ ์ฐธ๊ณ ํ์
arr[0] = 7
์ฌ๊ธฐ์๋ถํฐ ์ฌ์ค์ ๋๊ฐ๋ฆฌ -> ๋ค ์กฐํฉํด๋ 5๊ฐ๊ฐ ์๋๋ค
๊ทธ ์ธ์ arr[0] = 10์ธ ๊ฒฝ์ฐ์๋
comb(11, 1) ์ธ๋ฐ ๋ค์ ์ฌ๊ท๋ถํฐ๋
for (int 11 = start, i < 11; i++)
์ด๋ผ์ ์ฌ์ค์ arr[1]๋ถํฐ๋ ๋ค์ด์ฌ ์๊ฐ ์๋ค


