코드
function solution(n) {
let nCount = n.toString(2).match(/1/g).length;
while (n++) {
if (n.toString(2).match(/1/g).length == nCount) return n;
}
}
다른 사람의 쉬프트를 이용한 빠른 계산
function solution(n) {
var i, j;
for (i = 0; !(n & 1); i++) {n = n >> 1; } // 1을 찾을때까지 우로 쉬프트, 쉬프트 횟수 = i
for (j = 0; n & 1; i++, j++) {n = n >> 1; } // 0을 찾을때까지 우로 쉬프트, 1의 갯수 = j
for (j--, n++; i !== j; i--) {n = n << 1; } // 0자리에 1대입, 1의 갯수 -1, i === j 가 될때까지 죄로 쉬프트하면서 쉬프트 횟수 -1
for (i; i; i--, n++) {n = n << 1; } // i === 0 될때까지 좌로 쉬프트 하면서 쉬프트 횟수 -1, 0자리에 1대입
return n;
}
'코딩 테스트 > 프로그래머스 level2' 카테고리의 다른 글
영어 끝말잇기 (0) | 2022.09.09 |
---|---|
카펫 (0) | 2022.09.09 |
다리를 지나는 트럭 (0) | 2022.09.09 |
피보나치 수 (0) | 2022.09.08 |
숫자의 표현 (0) | 2022.09.08 |