[백준 14225] 부분수열의 합, 비트마스크

심지훈·2021년 4월 27일
0

부분수열의 합, 비트마스크
비트마스크 부분을 또 까먹어서 다시 풀때 또 문제를 풀지 못했다. 비트마스크 부분만 다시 봐야겠다.

for(int i=1; i<(1<<n); ++i){
        int sum = 0;
        
        for(int j=0; j<n; ++j){
            if(i&(1<<j)){
                sum += numbers[j];
            }
        }
        s.insert(sum);
    }

총 1<<n개의 경우의 수가 있고 총 n개의 비트들이 있음. 각 비트 자릿수는 입력값으로 들어온 배열의 K번째 인덱스를 뜻함. n개의 비트 중 k번째 비트가 0이면 배열의 원소 k번째는 사용하지 않는다, 1이면 사용한다는 뜻임
그걸 확인 하는 작업이 i & (1<<j) 1비트를 배열의 인덱스만큼 j번 왼쪽으로 시프트함으로써 경우의 수를 나타내는 i의 j번째 비트가 켜져 있는지 확인하는 작업

profile
유연한 개발자

0개의 댓글

관련 채용 정보