자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.
제한 사항
n은 1,000,000 이하의 자연수 입니다.
입출력 예
입출력 예 설명
입출력 예#1 문제 예시와 같습니다.
입출력 예#2 15(1111)의 다음 큰 숫자는 23(10111)입니다.
[간단설명] n의 다음 큰 숫자 찾기 ㄴ 정수이면서, 이진변환 시 1의 개수가 같으면 다음 큰 숫자
[접근방법] 1. n 의 1의 개수를 구한다.(current) 2. n을 1씩 증가시킨다. 3. next의 1의 개수를 구한다. 4. n의 1의 개수와 next의 1의 개수가 동일하면 정답 리턴
[주의사항] 1의 개수를 구할 때, replace나, split을 사용하게 되면, 효율성 테스트에 떨어진다. ㄴ toCharArray로 1의 개수를 카운트 하자.
[소스공개]
class Solution {
public int solution(int n) {
// 현재 숫자 이진변환
String currBinary = Integer.toBinaryString(n);
// 현재 숫자 1의 개수
int currCnt = oneCount(currBinary);
while(true){
n+=1;
// 다음 숫자 이진변환
String nextBinary = Integer.toBinaryString(n);
// 다음 숫자 1의 개수
int nextCnt = oneCount(nextBinary);
// 1의 개수가 같으면 종료
if(currCnt==nextCnt) break;
}
return n;
}
// 1의 개수 구하기
private int oneCount(String s){
int cnt = 0;
for(char c : s.toCharArray()){
if(c=='1'){
cnt++;
}
}
return cnt;
}
}