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 |