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



Programmers - [연습문제] 다음 큰 숫자




사용 언어 - C++

소요 시간 - 15분

정답 여부 - O




문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12911



문제 요약

  1. 자연수 n이 주어집니다.
  2. n의 다음 큰 숫자는 n보다 큰 자연수 중에서 2진수로 변환했을 때 1의 개수가 n과 같은 수 중 가장 작은 수입니다.
  3. n의 다음 큰 숫자를 반환합니다.




최종 코드

#include <string>
#include <vector>

using namespace std;

int CountOne(int n)
{
    int count = 0;
    
    while(n > 0)
    {
        if(n % 2 == 1)
            count++;
        
        n /= 2;
    }
    
    return count;
}

int solution(int n) {
    int answer = n + 1;
    
    int bits = CountOne(n);
    
    while(true)
    {
        if(CountOne(answer) == bits)
            return answer;
        
        answer++;
    }
}




트러블 슈팅

  • 2진수에서 1의 개수를 세는 함수를 따로 만들어서 반복문에서 활용하니 코드가 더 깔끔해졌다.
  • 처음에는 string 변환을 사용하려 했으나, 반복문과 나머지 연산으로 더 빠르게 구현할 수 있었다.




문제 풀이 후 소감

  • 2단계임에도 정답률이 왜 높은 문제인지 알 수 있었다. 문제 자체는 크게 어렵지 않은 것 같다.




오늘의 기록

  • 꾸준히 한 문제씩 풀기
  • 하는 일도 잘 풀리고, 아프지 않고 행복했으면 좋겠다