https://school.programmers.co.kr/learn/courses/30/lessons/12911
n의 다음 큰 숫자를 return
N보다 크면서 이진수로 변경하였을 때, 1의 갯수가 동일한 수를 찾는 문제이다.
1. 특정 수의 1의 갯수를 구하는 함수
특정 수의 1의 갯수를 계속하여 구하기 때문에 해당 기능을 하는 함수를 우선 작성해보자.
이진수로 변경했을 때, 1의 갯수를 세기 위하여, 수를 반드시 이진수로 변경할 필요는 없다.
bit연산을 활용하여 하나의 bit씩 확인하며 1의 갯수를 확인한다.
int getCount(int n){
int count = 0;
int base = 1;
while(base < n){
if((base & n) == base)
count++;
base = base << 1;
}
return count;
}
2. N보다 큰 수에 대하여 함수로 비교해보자.
1번에서 작성한 함수를 통해, N+1부터 1씩 증가시키며 1의 갯수를 확인해보자.
int answer = n+1;
int target = getCount(n);
while(target != getCount(answer++)){}
return answer-1;
class Solution {
public int solution(int n) {
int answer = n+1;
int target = getCount(n);
while(target != getCount(answer++)){}
return answer-1;
}
public int getCount(int n){
int count = 0;
int base = 1;
while(base < n){
if((base & n) == base)
count++;
base = base << 1;
}
return count;
}
}