분할 정복인 이유는 충분히 큰 n에 대해 2^n 길이의 문자열에서 시작해서, 반으로 나누어가며 그 왼쪽에 위치하면 반전이 없고, 오른쪽에 위치하면 반전이 하나 추가되는 형태로 찾아들어갈 수 있기 때문입니다. 이걸 비트로 표현하면 비트가 1인 것마다 반전이 생기는 것이기 때문에 그 개수를 세는 것만으로 찾는 값이 무엇인지를 알 수 있습니다.
그런데 이와 같은 풀이는 수를 1부터 세면 맞지 않고, 0부터 세야 맞기 때문에 1을 빼고 시작하는 것입니다.
hanil0623 3년 전
문제를 봐도 이해하기 어렵습니다. __builtin_popcount를 통해 k-1의 비트값 중 1의 개수가 답이던데 왜 그런지 모르겠습니다.
1. k번째 수열의 값을 구하는데 왜 k-1을 하는건가요?
2. 왜 1의 개수를 세는것이 답이 되는건가요?