Algorithm/programmers

2개 이하로 다른 비트 ( Level 2, JavaScript, 월간 코드 챌린지 시즌2 )

takeU 2021. 8. 12. 10:05
반응형

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
        }  
    })
}
  1. 짝수인 경우 이진수 마지막 자리인 0을 1로 바꾸는 과정 > 즉 +1을 해준다.
  2. 홀수인 경우 이진수 변환 후 가장 뒤에있는 0을 찾는다.
  3. 0이 없이 모두 1인경우 가장 앞의 1을 자르고 10을 추가한다.
    • ex) "111" -> "1011"
  4. 0이 있는 경우 가장 뒤에있는 0과 그 뒤 1을 삭제한 자리에 10을 추가한다.
    • ex) "1001" -> "1010"