코딩테스트
[프로그래머스] 다음 큰 숫자
코딩너구리
2024. 9. 7. 12:02
문제 설명
자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.
제한 사항
n은 1,000,000 이하의 자연수 입니다.
진수 변환 방식을 사용할 줄 안다면 쉽게 풀 수 있는 문제이다. n이 2보다 작아질때까지 2로나누어주고 그 나머지 값과 마지막 몫을 역순으로 하면 2진수가 된다.
#include <string>
#include <vector>
using namespace std;
string Convert(int n)
{
string result="";
int base = n;
while(base>1)
{
result.insert(0,to_string(base%2));
base/=2;
}
result.insert(0,to_string(base));
return result;
}
int GetOneCount(string n)
{
int result =0;
for(int i=0; i<n.size();i++)
{
if(n[i]=='1')
{
result++;
}
}
return result;
}
int solution(int n) {
int answer = n+1;
string twoN = Convert(n);
int oneCountN = GetOneCount(twoN);
while(true)
{
string twoAnswer = Convert(answer);
int oneCountAnswer = GetOneCount(twoAnswer);
if(oneCountN==oneCountAnswer)
{
return answer;
}
else
{
answer++;
}
}
return answer;
}
https://school.programmers.co.kr/learn/courses/30/lessons/12911