본문 바로가기

Algorithm/프로그래머스

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

반응형

 

프로그래머스 : 다음 큰 숫자

 

프로그래머스

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

programmers.co.kr

 


- 문제

  n보다 크면서 이진수로 바꾸었을 때 1의 개수가 같은 숫자를 찾아내는 문제다.

 


- 풀이

#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int answer = 0;
    int now2 = 0, next2 = 0, temp;
    temp = n;
    while(temp != 0){
        if(temp%2 == 1){
            now2++;
        }
        temp /= 2;
    }
    while(1){
        temp = ++n;
        next2 = 0;
        while(temp != 0){
            if(temp%2 == 1){
                next2++;
            }
            temp /= 2;
        }
        if(next2 == now2){
            break;
        }
    }
    answer = n;
    return answer;
}

 

  n부터 시작해서 +1씩 해주면서 모든 경우에 대해 이진수로 변환한 다음 1을 세보았다.

 

맞기는 했지만 너무 비효율적인거 같아서 다른 사람은 어떻게 했나 봤는데, 와우!

 

 

#include <bitset>

using namespace std;

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

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

 

bitset을 이용해서 1의 개수를 세는 방법은 진짜 생각하지도 못했었다!

 

 

  


- 기억할 것!

 bitset을 이용해서 이진수 쉽게 접근할 수 있다.

반응형