C++:: 프로그래머스 < 다음 큰 숫자 >

jahlee·2023년 8월 14일
0

프로그래머스_Lv.2

목록 보기
98/106
post-thumbnail

이진수 변환했을때의 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;
}

0개의 댓글