본문 바로가기
Algorithm/프로그래머스

[프로그래머스]연습문제 : 다음 큰 숫자(level 2)(c++)

by HBGB 2020. 5. 19.

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

 

코딩테스트 연습 - 다음 큰 숫자

자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니

programmers.co.kr

 

#include <string>
#include <vector>

using namespace std;

int get_1_count(int n)
{
    int cnt = 0;
    while (n)
    {
        if (n % 2 == 1)
        {
            ++cnt;
        }
        n /= 2;
    }
    return cnt;
}

int solution(int n) {
    
    // input값이 2진수일때 1의 개수 구하기
    int cnt = get_1_count(n);
    int answer = n + 1;

    // 다음 큰 숫자가 input값과 1의 개수가 같을 때까지 증가 시키기 
    while (get_1_count(answer) != cnt)
    {
        ++answer;
    }
    return answer;
}

 

 

2진수일때 1 개수 구하기는 다음과 같이 비트연산을 이용할 수도 있다

int get_1_count_bit_ver(int n)
{
    int cnt = 0;
    for (int i = 0; i < 31; ++i)
    {
        // 2^i의 자리에 1이 있을때
        if (n & 0x01 << i)
        {
            ++cnt;
        }
    }
    return cnt;
}

 

 

댓글