전체 탐색 - 조합 전체 탐색 (비트 연산 이용)

N개의 양의 정수가 있고 정수를 몇개 골라 그 합을 W로 만들 수 있는지 궁금하다면 비트 연산을 통해 구할 수 있다.

N = 3, -> [1,2,3] , W = 5 일 때

배열에서 만들 수 있는 조합은 2**3으로 총 8개 이다.
2진법으로 표현하면 000, 001, 010, 011, 100, 101, 110, 111이다.
0은 배열에서 고르지 않은것, 1은 배열에서 골라서 더한것
에를들면 011은 [2,3]을 의미한다.

for(let bit = 0; bit < (1<<N); bit++){ bit는 1000까지 즉 0~7까지 반복
	let sum = 0;
    for(let i = 0; i<N; i++){
    	if(bit & (1<<i))sum += N[i];
        //만약 bit = 011일 때 1<<0 : 1, 1<<2 : 10, 1<<3 : 100 으로 각각 AND 연산을 하면 
        //i = 1, i = 2일때만 더한다. sum = 5
    }
    if(sum === W) return true;
	}
    return false;
}

'코테 준비 > 알고리즘' 카테고리의 다른 글

자료 구조 진짜 진짜 진짜 정리  (0) 2024.08.07
에라토스테네스의 체 - 소수 빠르게 알아내기  (0) 2024.08.05
숫자의 표현 문제  (0) 2024.08.05
약수 구하기  (0) 2024.08.05
나머지 연산의 특징  (0) 2024.08.05