Coding Problem

[프로그래머스] 2개 이하로 다른 비트

Yepchani 2024. 12. 31. 16:43
반응형

문제

2개 이하로 다른 비트

https://school.programmers.co.kr/learn/courses/30/lessons/77885

 

 

풀이

설명

양의 정수들로 이루어진 배열이 있을 때, 각 숫자마다 자신보다 크고 자신과 비트가 2개 이하로 다른 수들 중 제일 작은 수를 배열에 담아 구하는 문제입니다.

 

조건을 만족하는 수는 다음과 같이 구할 수 있습니다.

  • 짝수의 경우, 이진수가 항상 0으로 끝나므로, 1을 더하면 됩니다.
  • 홀수의 경우, 가장 마지막에 위치한 '01'을 '10'으로 바꾸면 됩니다. 1로만 이루어질 수 있으므로, 이진 문자열 앞에 0을 붙인 후 수행합니다.

 

예시 코드

function solution(numbers) {
  return numbers.map((x) => {
    if (x % 2 === 0) return x + 1;
    else {
      const bin = "0" + x.toString(2);
      const idx = bin.lastIndexOf("0");
      return parseInt(bin.slice(0, idx) + "10" + bin.slice(idx + 2), 2);
    }
  });
}