반응형
부분집합의 모든 조합 구하기
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
|
package com.ssafy.algo;
public class Test69 {
public static void main(String[] args) {
int[] A = { 1, -2, 3, -4, 5, -6, 7, -8, 9 };
int cnt = 0;
//부분집합의 개수
for (int i = 0; i < 1 << A.length; i++) {
int sum = 0;
for (int j = 0; j < A.length; j++) {
if ((i & 1 << j) == 0) {
System.out.print(A[j] + " ");
sum+=A[j];
}
}
if(sum == 10) cnt++;
System.out.println();
}
System.out.println(cnt);
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
부분집합의 개수는 공집합을 포함하면 2^n 이다.
이것은 전구 4개가 잇을때 불을 끄고키는 조합의 개수 2^n과 같다.
어떤 형질이 2가지 선택 박에없을때 전구를 끄거나켜거나, 그 값을 선택하거나 안하거나
이럴때 조합을 쓸수있다.
만약 5가지라면 2bit로 나타내면 00000 ~ 11111 까지가 있다.
이것은 [0 2^5) 과 같다.
즉 for(int i=0;i<2^5;i++){} 탐색하면 00000 00101 11100 등 숫자를 탐색하면서 모든조합을 탐색할 수가있다.
반응형
'Algorithm' 카테고리의 다른 글
특정 Map 회전 시키기 (0) | 2020.02.07 |
---|---|
JAVA : Log 함수를 이용한 자리수 구하기 (0) | 2020.02.07 |
JAVA : Uppered Bounded (0) | 2020.02.03 |
비트 연산을 이용해 2^n 이 맞는지 판별하기 (0) | 2020.02.02 |
JAVA : LIS nlongN 기법 (0) | 2020.01.31 |