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

 

https://school.programmers.co.kr/learn/courses/30/lessons/12911

 

프로그래머스

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

programmers.co.kr


 

 

해결전략

 

구현, 이진수 변환


 

 

코드

 

#include <iostream>
#include <string>
using namespace std;

//이진수로 전환했을때 1의 개수를 카운팅하여 리턴하는 함수
int BinaryCount(int n)
{
    int cnt = 0;
    string bdigit;

    while (n > 0)
    {
        if (n % 2 == 1) cnt++;//1의 개수를 카운팅

        //이진수를 string으로 전환.
        //풀고보니 해당 문제에서는 굳이 필요하지 않았다. 하지만 자주 쓰이니 눈에 익혀두자.
        bdigit = to_string(n % 2) + bdigit;

        n /= 2;
    }

    return cnt;
}

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

    int x = BinaryCount(n);//n일 때 1의 개수

    //n을 1씩 증가시키면서 이진수 변환
    while(n++) 
    {
        //변환한 이진수의 1의 개수 = n일 때 1의 개수면 break 종료
        if (BinaryCount(n) == x)
            break;
    }

    answer = n;//answer에 갱신된 n값을 넣어준다.
    

    return answer;
}


int main() {

    cout << solution(78);

    return 0;
}

 

 


 

인터넷에서 찾은 간단한 풀이

 

#include <bitset>

using namespace std;

int solution(int n) 
{
	//현재 주어진 정수 n의 이진수 빈도에서 1의 개수를 찾는다.
    int num = bitset<20>(n).count();

	//n을 증가하면서 해당 조건에 부합하는 수를 찾을 때까지 반복
    //조건: 이진수의 1의 개수가 처음 n의 1의 개수와 같아야 한다.
    while (bitset<20>(++n).count() != num);
   	return n;
}

 

 

Bitset 참고 링크

https://notepad96.tistory.com/35

 

[STL] Bitset 생성 및 초기화 사용법

1. bitset bitset은 0 또는 1, true 또는 false의 값을 갖도록 필요한 경우 사용할 수 있다. 이와 같은 형태의 따라서 여러가지 비트 연산을 할 수 있도록 여러 멤버 함수들을 지원한다. 또한, 마찬가지로

notepad96.tistory.com