본문 바로가기

Algorithm

부분집합의 조합 구하기 : JAVA

반응형
부분집합의 모든 조합 구하기
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
 
public class Test69 {
    public static void main(String[] args) {
        int[] A = { 1-23-45-67-89 };
 
        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