https://www.acmicpc.net/problem/11723
비트 연산자를 사용해서 해결하는 문제입니다.
모든 연산에 공통으로 사용되는 개념은
특정 숫자를 확인한다는 것은 특정 숫자를 특정 위치 비트까지 민다는 것을 의미합니다.
num은 비트 연산에서 (1 << num)을 의미합니다.
1. add - OR 연산자를 통해 숫자를 추가해줍니다.
2. remove - 특정 비트만 0으로 만들어버리는 방법입니다.
2-1. 특정 위치까지 비트를 밉니다. int candidate = (1 << num)
2-2. 비트를 반전합니다. candidate = ~candidate
2-3. 반전한 비트는 특정 숫자만 0인 상태이므로 이 숫자와 기존 숫자를 & 연산하면 특정 숫자가 제거됩니다.
3. check - AND 연산자를 통해 특정 숫자의 유무를 확인할 수 있습니다.
4. toggle - 특정 위치까지 비트를 민 후에 XOR 연산을 합니다.
5. all - 20이 상한선이니 (1 << 21)까지 비트를 민 후 비트를 반전하면 1~20 위치의 비트가 모두 1이 됩니다.
6. empty - 숫자 0으로 만듭니다.
코드: https://github.com/cottory/algorithm/blob/master/BOJ/BOJ11723.cc
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ]13308번: 주유소 (0) | 2020.08.28 |
---|---|
[BOJ]1562번: 계단 수 (0) | 2020.08.27 |
[BOJ]2589번: 보물섬 (0) | 2020.08.22 |
[BOJ]5427번: 불 (0) | 2020.08.22 |
[BOJ]2644번: 촌수계산 (0) | 2020.08.22 |