어떤 수 N(1≤N≤1,000,000) 이 주어졌을 때, N의 다음 큰 숫자는 다음과 같습니다.
N의 다음 큰 숫자는 N을 2진수로 바꾸었을 때의 1의 개수와 같은 개수로 이루어진 수입니다.
1번째 조건을 만족하는 숫자들 중 N보다 큰 수 중에서 가장 작은 숫자를 찾아야 합니다. 예를 들어, 78을 2진수로 바꾸면 1001110 이며, 78의 다음 큰 숫자는 83으로 2진수는 1010011 입니다. N이 주어질 때, N의 다음 큰 숫자를 찾는 nextBigNumber 함수를 완성하세요.
functionnextBigNumber(n){ var answer = 0; var countPre = 0; var increaseNum = n; var arr = ''+n.toString(2).split('') for(var num = 0; num<arr.length; num++){ if(arr[num]*1 === 1){ countPre++ } } increaseNum++ while(true){ var innerCount = 0; var increaseArr = ''+increaseNum.toString(2).split('') for(var innerNum = 0; innerNum<increaseArr.length; innerNum++){ if(increaseArr[innerNum]*1 === 1){ innerCount++; } } if(innerCount === countPre){ return increaseNum; break; } increaseNum++; } return answer; } //아래 코드는 테스트를 위한 코드입니다. console.log(nextBigNumber(78)); // 83 console.log(nextBigNumber(857171)); //857173
풀이 (다른 사람)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
functionnextBigNumber(n){ var answer = 0; let s = Number(n).toString(2) let c = s.split('').filter(x =>1===parseInt(x,10)).length while(true){ n+=1 if(Number(n).toString(2).split('').filter(x =>1===parseInt(x,10)).length ===c){ break } } return n; } //아래 코드는 테스트를 위한 코드입니다. console.log(nextBigNumber(78)); // 83 console.log(nextBigNumber(857171)); //857173
배운점
Array 프로퍼티 중 filter를 이용하여 1의 요소만 배열에 담은 배열의 길이만 체크하는 함수를 사용 할 수 있다는 것을 배웠다.
ECMAScript6를 배웠는데 사용을 잘 하지 못하고 있어서 사용법을 익혀야겠다.
느낀점
코드 작성 시 몰랐지만 increaseNum++을 한번만 사용해도 코드가 잘 돌아가는데 나중에 눈 디버깅으로 체크하여 불필요한 코드가 작성되어 있는 것을 확인하였다.