1. 나의 시도
1.1. bitset 이용
| |
bitset은 비트 개수를 템플릿 인자로 받는 C++의 비트열 자료구조- bit의 비교 횟수는 비트열의 bit 개수 $N$에 비례한다 → 시간 복잡도: $O(N)$
1.2. shift 연산과 xor 연산 활용
| |
- shift 연산은 대부분 프로세서에서 상수 시간에 계산
- bit의 비교 횟수는 비교 데이터의 bit 개수 $N$에 비례 → 시간 복잡도: $O(N)$
2. 검색 후 찾은 방법
2.1. 덧셈, 뺄셈 활용
| |
- 세 번의 산술 연산만 필요 → 시간 복잡도: $O(1)$
- 오버플로우 위험 존재
2.2. 곰셉, 나눗셈 활용
| |
- 세 번의 산술 연산만 필요 → 시간 복잡도: $O(1)$
- 오버플로우 위험 존재
- 0 나누기 위험 존재
2.3. XOR 비트 연산 활용
| |
- 같은 데이터로 xor 연산 두 번하면 원래 데이터로 돌아오는 성질 이용
- 세 번의 비트 연산만 필요 → 시간 복잡도: $O(1)$