[프로그래머스] 다음 큰 숫자 | C++

Algorithm/문제풀이

2022. 12. 26. 13:43


문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

주어진 n보다 크면서

n과 비트의 수가 같은 자연수를 찾는 문제였다.

 

나의 풀이 전략

1. 비트의 갯수를 세주는 getBitCount() 함수를 선언한다.

2. n + 1부터 while 문을 돌린다.

 

상세

1. 자연수 n에 대해서 비트의 수를 반환하는 getBitCount() 함수를 선언한다.

더보기
int getBitCount(int n)
{
    int answer = 0;

    return answer;
}

 

2. 1을 비트단위로 하나씩 옮겨가며 비트가 겹치면 반환값(answer)을 추가해준다.

int getBitCount(int n)
{
    int answer = 0;

    for(int i = 0; (1 << i) <= n; ++i)
    {
        if( n & (1 << i) )
            answer++;
    }

    return answer;
}

 

3. 이제 solution()에서 (n + 1)부터 시작하여

while 문으로 비트가 같은 자연수를 찾아본다.

더보기
int solution(int n) {
    int answer = n + 1;
    int nBitCount = getBitCount(n);

    while(getBitCount(answer) != nBitCount)
        answer++;

    return answer;
}

 

전체 소스코드

using namespace std;

int getBitCount(int n)
{
    int answer = 0;

    for(int i = 0; (1 << i) <= n; ++i)
    {
        if( n & (1 << i) )
            answer++;
    }

    return answer;
}

int solution(int n) {
    int answer = n + 1;
    int nBitCount = getBitCount(n);

    while(getBitCount(answer) != nBitCount)
        answer++;

    return answer;
}

 

다른 사람의 풀이

#include <bitset>

using namespace std;

int solution(int n) {
    int num = bitset<20>(n).count();

    while (bitset<20>(++n).count() != num);
    return n;
}