프로그래머스 Lv.2 코딩테스트

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

하다블 2022. 5. 25. 19:24
반응형

문제는 다음과 같습니다.

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;

string TenToBinary(int n)
{
    string s="";
    while(n>0){
        int remain = n%2;
        n/=2;
        s = to_string(remain)+s;
    }
    return s;
}

int counting(string &s){
    int a=0;
    for(int i{0};i<s.length();i++){
        if(s[i]=='1')
            a++;
    }
    return a;
}

int solution(int n) {
    int answer {0};
    string s = TenToBinary(n);
    int s_one = counting(s);

    int tmp{n+1};
    while(true){
        string binary = TenToBinary(tmp);
        if(s_one==counting(binary)){
            answer=tmp;
            break;
        }
        tmp++;
    }    

    return answer;
}

문제를 풀기 위해 함수를 2개 더 만들었는데 하나는 10진수의 수를 2진수로 바꾸어주는 함수이고 하나는 그 2진수의 수에 1의 개수가 얼마나 있는지 카운트하는 함수입니다.

1의 개수를 세기 위해 2진수의 경우에는 문자열로 받아 풀었습니다.

문제의 조건에 맞는 "다음 큰 숫자"를 확인하는 방법은 입력받은 수를 2진수로 바꾸고 1의 개수를 확인한 다음 이후 1씩 증가시켜 그 수의 2진수의 1의 개수가 같을 때 까지 계속 진행하는 방법입니다.

 

반응형