프로그래머스 LEVEL 2(2개 이하로 다른 비트)

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2022-10-08

  • 해결 방법 :
    • number가 홀수인 경우, 2진수로 변환 후 0이 나오는 가장 작은 비트만 1인 값 저장 (min_add)
    • 예) 1011 => 100, 111 => 1000
    • number에서 min_add를 더하고, min_add의 반만큼 뺀 값 push()
    • number가 짝수인 경우, number에 1 더한 값 push()
  • 회고 :
    • 처음에 findIndex()로 만족하는 가장 작은 인덱스의 값을 찾았으나 findIndex()의 시간 복잡도가 O(n)이기 때문에 효율성 테스트에서 통과하지 못함
  • 코드

    function solution(numbers) {
        const answer = [];
        for (const number of numbers) {
            if (number % 2) {
                const binary = number.toString(2);
                let index = binary.split('').reverse().findIndex((e) => e === '0');
                if (index < 0) index = binary.length;
                let min_add = parseInt('1' + '0'.repeat(index), 2);
                answer.push(number + min_add / 2) 
            } else answer.push(number + 1);
        }
        return answer;
    }
    
  • 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges