비트연산자
- &: AND 연산
- |: OR 연산
- ^: XOR 연산. 같으면 false, 다르면 true
- ~: 모든 비트 반전. 1의 보수연산자
- <<, >>: 비트 이동
★ ~value = -(value + 1)
주요 로직
| logic | code | description |
| idx번째 비트 끄기 | target &= ~(1 << idx) | idx번째 비트를 0으로 만들고 AND 연산을 통해 끄기 |
| idx번째 비트 XOR 연산 | target ^= (1 << idx) | idx번째 비트와 1을 XOR 연산 |
| 켜진 최하위 비트 찾기 | idx = (target & -target) | -target은 ~target + 1과 같은 결과이다. 따라서 기존 target을 뒤집고 +1을 하면 언제나 마지막에 켜져있는 비트가 켜지고 AND 연산을 통해 찾을 수 있다. |
| 크기가 n인 집합의 모든 비트 켜기 | (1 << n) - 1 | 시프트 연산을 통해 밀고 -1을 하면 모든 비트가 뒤집혀 켜진다. |
| idx번째 비트 켜기 | target |= (1 << idx) | 켜는 동작은 해당 비트에 1을 OR 연산하면 켜진다. |
| idx번째 비트가 켜져 있는지 확인 | target & (1 << idx) | 켜져 있는지 확인하기 위해서는 1을 통해 AND 연산 |
비트마스킹은 집합에 관련된 연산 또는 경우의 수를 구하는 등 여러 상황에서 사용해 볼 수 있습니다. 두 가지로 상태가 구분되는 경우에도 활용해 볼 수 있습니다.
비트마스킹을 활용하면 코딩테스트 중 속도와 메모리 측면에서 이득을 볼 수 있습니다.
주의 사항!!
idx번째를 나타내려고 사용하는 1 << idx는 0부터 시작입니다.
연산자 우선순위가 헷갈리는 경우에는 괄호를 잘 써주어야 합니다.
시프트 연산이 있기 때문에 2^n으로 늘어납니다. 따라서 n이 30 이하인 경우에 사용해야 문제가 해결된다고 볼 수 있습니다.
'알고리즘&코테' 카테고리의 다른 글
| [코테 꿀팁] JS가 나타낼 수 있는 수의 범위는? (0) | 2025.06.26 |
|---|---|
| [코테 꿀팁] JS 입력값 받아올 때 주의할 점 require('fs') (0) | 2025.06.13 |
| [자료구조 활용] Deque 이렇게도 활용할 수 있다! (0) | 2025.05.22 |
| [자료구조] Deque with JS 리팩토링2 (0) | 2025.05.20 |
| [자료구조] Deque with JS 메모리 누수 방지 (0) | 2025.05.16 |