조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.
예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.
자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성
1차 시도 ) 규칙을 찾으려 했다. 1의 갯수가 동일한 채로 더 큰 수가 되기 위해서는 두번째 자리에 오는 1의 위치가 좌로 이동해야 하고 1,2번째로 오는 1을 제외한 나머지 1이 우측부터 차례대로 자리를 채우면 조건 3을 만족한다고 추측했다. 만약 모두 1로 이루어진 이진수였을 경우 1,2번째 '1' 사이에 0이 추가된만큼 수가 증가할 것이라는 식을 세워 코드를 작성했다. 그 결과 문제에 제시된 예시만 통과하고 정확성 테스트에서 오답이 나왔다.
2차 시도 ) 브루트포스 방식으로 풀이했다. 처음 주어진 이진수 n의 1의 개수와 동일한 수가 나올 때까지 n을 하나씩 증가시켜 이진수로 변환한 뒤 비교했다.
function solution(n) {
let count = 0;
count = binCount(n);
while(1){
if(binCount(++n) === count){
return n;
}
}
return answer;
}
function binCount(num){
const bin = num.toString(2)
let countOne = bin.match(/1/gi).length;
return countOne;
}