문제

programmers12911

자연수 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;
}