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

ahyes·2023년 4월 26일
0

코딩테스트 개념

목록 보기
6/7

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;
}
profile
프론트엔드 공부를 해봅시다

0개의 댓글