Lv.2 - 두 개 이하로 다른 비트

·2022년 9월 17일
0

프로그래머스

목록 보기
14/18
post-thumbnail

예시 1 : 1110 -> 1111
예시 2 : 0111 -> 1011
예시 3 : 110101 -> 110110

  • 예시 1을 통해 맨 끝 자리가 0인 이진수는 1만 더해서 반환하면 된다는 결론이 나온다.
  • 예시 2와 3을 통해 이진수 맨 마지막에 있는 01을 10으로 만들면 된다는 결론이 나온다.
function solution(numbers) {
  return numbers.reduce((acc, cur) => {
    // 이진수로 변환
    const s = cur.toString(2);
    // 맨 마지막 0의 인덱스
    const i = s.lastIndexOf(0);
    // i가 맨 마지막이면 1만 더해서 반환
    if (i === s.length - 1) acc.push(cur + 1);
    // i가 뒤에서 n번째에 위치했다면 2의 n-1 제곱만 더해서 반환한다.
    else acc.push(cur + Math.pow(2, s.length - i - 2));
    return acc;
  }, []);
}
profile
모르는 것 투성이

0개의 댓글