[ C++ ] 프로그래머스 Level2: 다음 큰 숫자
✏️ PS/Programmers

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

반응형

 

안녕하세요? 수구리입니다.

이번 문제는 프로그래머스의 Level 2 문제를 풀어보려고 합니다.

Level 2이지만 단순 구현 문제라서 어렵지는 않았습니다.

아래는 문제를 링크해두도록 하겠습니다.

 

[ 문제 ]

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>
#include <iostream>

using namespace std;

int countOne(string s){
    int cnt = 0;
    for (int i=0; i < s.size(); i++) {
        if (s[i] == '1') cnt++;
    }
    return cnt;
}

int toBinaryAndCountOne(int n)
{
    string r;
    while (n != 0){
        r += ( n % 2 == 0 ? "0" : "1" );
        n /= 2;
    }
    int cnt = countOne(r);
    
    return cnt;
}

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

    for (int i=n+1; n <= 1000000; i++) {
        if (oneCountN == toBinaryAndCountOne(i)) {
            answer = i;
            break;
        }
    }
    
    return answer;
}

 

 

[ 실행 결과 ]

 

 

[ 풀이 설명 ]

1. toBinaryAndCountOne 함수를 통해서 입력받은 정수 n에 대한 이진수의 1의 개수를 oneCountN이라는 변수에 저장

2. 다음으로는 i를 n 바로 다음 수부터 ( n + 1 ) 반복하면서 같은 1의 개수가 나온다면 

3. 그때의 i값이 우리가 원하는 answer이므로 break후, return 합니다.

 

toBinaryAndCountOne 함수는 입력받은 정수를 이진수의 문자열로 변환해주는 함수이며,

변환된 string을 countOne 이라는 함수를 통해서 1의 개수를 return 받습니다.

countOne이라는 함수는 인자로 받은 string에서 단순히 1의 개수를 counting 하는 함수입니다.

이상으로 다음 큰 숫자에 대한 풀이였습니다. 감사합니다!

반응형