level 3. 다음 큰 숫자 (Javascript)

다음 큰 숫자

문제

어떤 수 N(1≤N≤1,000,000) 이 주어졌을 때, N의 다음 큰 숫자는 다음과 같습니다.

  • N의 다음 큰 숫자는 N을 2진수로 바꾸었을 때의 1의 개수와 같은 개수로 이루어진 수입니다.
  • 1번째 조건을 만족하는 숫자들 중 N보다 큰 수 중에서 가장 작은 숫자를 찾아야 합니다.
    예를 들어, 78을 2진수로 바꾸면 1001110 이며, 78의 다음 큰 숫자는 83으로 2진수는 1010011 입니다.
    N이 주어질 때, N의 다음 큰 숫자를 찾는 nextBigNumber 함수를 완성하세요.

풀이 (본인)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function nextBigNumber(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
function nextBigNumber(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++을 한번만 사용해도 코드가 잘 돌아가는데 나중에 눈 디버깅으로 체크하여 불필요한 코드가 작성되어 있는 것을 확인하였다.
  • 코드를 작성하고 중복 선언된 코드를 제거 할 수 있는 능력을 키워야겠다.
공유하기