자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.
예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.
자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.
n은 1,000,000 이하의 자연수 입니다.
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int two = 0, answer = n + 1;
while(n != 0) {
if(n % 2 == 1) ++two;
n /= 2;
}
while(1) {
int now = answer, ntwo = 0;
while(now != 0) {
if(now % 2 == 1) ++ntwo;
now /= 2;
}
if(ntwo == two) return answer;
else ++answer;
}
}
bitset
이라는 헤더 파일을 이용할 수 있다고 한다.
#include <bitset>
using namespace std;
int solution(int n) {
int num = bitset<20>(n).count();
while (bitset<20>(++n).count() != num);
return n;
}
bitset<20>(n)
: n을 20개의 bit로 표현
bitset
사용
bitset<20> n
: 비트를 선언, 20개의 비트로 표현n.reset()
: 모든 비트를 0으로 리셋n.set()
: 모든 비트를 1로 셋팅n.any()
: 하나의 비트라도 1이면 true 반환n.none()
: 하나의 비트라도 1이면 false 반환n.flip()
: 모든 비트 반전,n.flit(0)
은 0번째 비트만 반전n.to_ulong()
: 비트를 10진수로 변환