1차 시도 : 완전 탐색
처음엔 수의 최대 값을 \(2^{15}\)라고 보고 10진수를 2진수로 변환해, 완전탐색을 시도했다.
하지만 수의 최대 값은 \(10^{15}\)였고, 당연하게도 시간초과가 발생했다.
2차 시도 : 규칙성
결국 구글에 검색을 해서 참고를 했다.
이 문제에는 규칙이 존재했다.
- 짝수일 경우엔,
값 + 1
이 반드시 답이다.
- 홀수의 경우에는, 최하위 bit부터 탐색해 처음 0이 나오는 비트 바로 아랫자리에 1을 더해주면 정답이 된다.
정말 대단한 아이디어다.