안녕 세상아,

[프로그래머스/c++] Lv2 다음 큰 숫자 본문

프로그래머스

[프로그래머스/c++] Lv2 다음 큰 숫자

돈 많은 백수가 되고싶다 2024. 8. 26. 15:27

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

 

프로그래머스

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

programmers.co.kr

1. 10진수를 2진수로 바꾸는 함수 작성한다.

2. 2진수 중 1의 갯수를 count 하는 함수 작성한다. 

3. 주어진 n을 2진수로 바꾸는 함수에 대입한다.

4. 2진수로 바꾼 후 1의 갯수를 count 하는 함수에 대입한다.

5. for문을 돌리면서 주어진 n보다 크지만 2진수로 바꾼 후 1의 갯수가 같은 자연수를 찾는다. 

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

string tenToTwo(int number){
    if(number == 0)
        return "0";
    string bit = "";
    while(number != 0){
        bit += to_string(number % 2);
        number = number / 2;
    }
    reverse(bit.begin(),bit.end());
    return bit;
}
int cnt(string t){
    int count = 0;
    for(int i = 0; i < t.size(); i++){
        if(t[i] == '1')
            count++;
    }
    return count;
}
int solution(int n) {
    int answer = 0;
    string twoN = tenToTwo(n);
    int x = cnt(twoN);
    
    for(int i = n+1;; i++){
        string two = tenToTwo(i);
        int countOne = cnt(two);
        if(countOne == x){
            answer = i;
            break;
        }
    }
    return answer;
}