Post

combination

๐Ÿ™‹โ€โ™‚๏ธ ๋“ค์–ด๊ฐ€๋ฉฐ

์กฐํ•ฉ์„ ๋ณผ๊นŒ?

์•„๋ž˜ Java ์ฝ”๋“œ๋Š” back-tracking ๊ด€์ ์—์„œ ์ ‘๊ทผํ•œ ํ•ต์‹ฌ ํ’€์ด์ž…๋‹ˆ๋‹ค. ์ž…๋ ฅ ์กฐ๊ฑด๊ณผ ์‹œ๊ฐ„ยท๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ํ•จ๊ป˜ ๊ณ ๋ คํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ์ค„์ด๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

1
2
n = 10
r = 5

์œ„ ๊ตฌํ˜„์€ combination์˜ ์ œ์•ฝ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋„๋ก ์ž๋ฃŒ๊ตฌ์กฐ ์„ ํƒ๊ณผ ๋ฐ˜๋ณต ๋ฒ”์œ„๋ฅผ ์ตœ์ ํ™”ํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

${}{n}C{r}$ = 252



์—ฌ๊ธฐ์„œ ์กฐํ•ฉ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค

  1. ๋ฐฑํŠธ๋ž™ํ‚น
  2. ๋น„์Šค๋งˆ์Šคํ‚น

๊ทธ๋Ÿฐ๋ฐ 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]๋ถ€ํ„ฐ๋Š” ๋“ค์–ด์˜ฌ ์ˆ˜๊ฐ€ ์—†๋‹ค

This post is licensed under CC BY 4.0 by the author.

Trending Tags