이진수 변환했을때의 1개수가 같고 n보다는 큰값중 가장 작은 값을 리턴하면 되는 문제이다. bitset을 사용하면 간단하다.
#include <string>
#include <vector>
#include <bitset>
using namespace std;
int cnt1Bits(int n) {
string n_bits = bitset<20>(n).to_string();// 1000000은 이진수 20비트 안으로 표현할 수 있다.
int cnt = 0;
for (auto c : n_bits) {
if (c == '1') cnt++;
}
return (cnt);
}
int solution(int n) {
int answer = n+1, cnt;
cnt = cnt1Bits(n);
while (cnt != cnt1Bits(answer)) {
answer++;
}
return answer;
}
bitset의 count 함수를 사용하면 더 간단하게 풀 수 있다.
#include <string>
#include <vector>
#include <bitset>
using namespace std;
int solution(int n) {
int answer = n+1, cnt = bitset<20>(n).count();
while (cnt != bitset<20>(answer).count()) {
answer++;
}
return answer;
}