코테 좀 해라★彡/C++

다음 큰 숫자

요미 ★ 2024. 4. 1. 18:37

#include <string>
#include <vector>
#include <iostream>
using namespace std;

int solution(int n) {
    int answer = 0;
    
    //1.일단 n을 이진수로 변환시키기
    string binary = "";
    while(n != 0) 
    {
        binary = to_string(n % 2) + binary;
        n /= 2;
    }
    
    //2. 뒤 인덱스부터 보고 자기가 1일때 앞 인덱스에 0이 있는지 확인
    int idx = 0;
    for(int i = binary.size() - 1; i > 0; i--)
    {
        if(binary[i] == '1' && binary[i-1] == '0')
        {
            binary[i-1] = '1';
            binary[i] = '0';
            idx = i;
            break;
        }
    }

    //3. idx가 0이면 없는 경우 이므로 이럴땐 앞에 1을 추가해준다.
    if(idx == 0) 
    {
        binary[0] = '0';
        binary ='1' + binary;
        
        //그 뒤에 인덱스들을 확인하기 위해서 2를 넣어줌
        idx = 2;
    }
    

    //4. 자기가 1일때 뒤에 0이 있으면 위치를 바꿔준다.
    for(int i = idx; i < binary.size(); i++)
    {
        if(binary[i] == '1')
        {
            for(int j=i;j<binary.size();j++)
            {
                if(binary[j] == '0')
                {
                    binary[j] = '1';
                    binary[i] = '0';
                    break;
                }
            }
        }

    }
    
    //5. 이제 이진수에서 십진수로 바꿔준다.
    int num = 1;
    for(int i = binary.size() - 1; i >= 0; i--)
    {
        if(binary[i] == '1')
        {
           answer += num;
        }
        num *= 2;
    }
    
    return answer;
}