코테 좀 해라★彡/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;
}