C++ 문제풀이/프로그래머스
[프로그래머스 / 연습문제] 다음 큰 숫자
지노링
2022. 11. 1. 17:30
728x90
문제 내용
어떤 수 n 를 이진수로 변환했을 때, 그 1의 개수가 같고 n 보다 큰 수를 찾는 문제
풀이
처음에는 굉장히 어렵게 생각했었다.
n 을 이진수로 변환하고, 그 뒤 1진수에서 뒤의 0을 빼고 앞의 0 을 1로 바꿔주는 ... 뭐랄까
이진수에서 대소비교를 하려고 했다.
그러다 문득 생각이 든 것이 대소비교는 그냥 정수로 하고,
그냥 큰 값에서 이진수로 변환하고 1의 개수가 같은것만 판단하면 되는거아냐?
라고 생각하면 난이도가 쉬워진다.
항상 이런 생각의 전환이 중요한 것 같다.
#include <string>
#include <vector>
using namespace std;
int CountOne(int n)
{
int cnt = 0;
while(n > 0)
{
if( n % 2 == 1) cnt ++;
n/= 2;
}
return cnt;
}
int solution(int n) {
int answer = 0;
int cnt = CountOne(n);
n++;
while(1)
{
if( cnt == CountOne(n) )
return n;
n++;
}
}
728x90