자연수 N이 주어졌을 때, N보다 크면서 이진수로 변환했을 때 N과 1의 개수가 같은 자연수 중 가장 작은 수를 구하는 문제이다.
먼저 N을 이진수로 변환했을 때 1의 개수를 찾고, N+1부터 loop을 돌며 N과 1의 개수가 같은 자연수를 직접 찾아 해결했다.
#include <string>
#include <vector>
#include <bitset>
using namespace std;
int solution(int n) {
bitset<20> original(n); // n을 이진수로 변환
int ones = original.count(); // 변환한 이진수의 1의 개수 저장
int answer = n+1;
while(true) { // n+1부터 하나씩 다 해보며 답을 찾는다
bitset<20> tmp(answer);
if(ones == tmp.count()) break; // 다음 큰 숫자를 찾은 경우 종료
answer++;
}
return answer;
}