반응형
2개 이하로 다른 비트 ( Level 2 )
Programmers 월간 코드 챌린지 시즌2 ( JavaScript )
나의 풀이
function solution(numbers) {
return numbers.map(el => {
if ( el % 2 ) {
let two = el.toString(2)
const idx = two.lastIndexOf('0')
two = idx === -1 ?
'10' + two.slice(1) :
two.slice(0, idx) + '10' + two.slice(idx + 2)
return parseInt(two, 2)
} else {
return el + 1
}
})
}
- 짝수인 경우 이진수 마지막 자리인 0을 1로 바꾸는 과정 > 즉 +1을 해준다.
- 홀수인 경우 이진수 변환 후 가장 뒤에있는 0을 찾는다.
- 0이 없이 모두 1인경우 가장 앞의 1을 자르고 10을 추가한다.
- ex) "111" -> "1011"
- 0이 있는 경우 가장 뒤에있는 0과 그 뒤 1을 삭제한 자리에 10을 추가한다.
- ex) "1001" -> "1010"