[CDT - Javascript] 프로그래머스 연습문제 @ 2개 이하로 다른 비트

김현수·2024년 2월 13일
0

cdt

목록 보기
51/51


🖋️ 2개 이하로 다른 비트


# 문제 설명

양의 정수 x에 대한 함수
f(x)를 다음과 같이 정의

  • 조건

    • x 보다 크기
    • x 와 비트가 1~2개 다른 수
      • 제일 작은 수

    • ex ) f(2) = 3
      • 02 = 0010
      • 03 = 0011
    • ex ) f(7) = 11
      • 07 = 0111
      • 11 = 1011
  • 매개 변수

    • 정수들이 담긴 배열 numbers
  • 반환값

    • numbers의 모든 수들에 대하여
      각 수의 f 값을 배열에 차례대로 담아 return

  • 📢 제한사항

    • 1 ≤ numbers의 길이 ≤ 100,000
    • 0 ≤ numbers의 모든 수 ≤ 10^15

  • 📰 입출력 예시

    numbersresult
    [2,7][3,11]



  • CODE

function solution(numbers) {
  const answer = [];
  for (let num of numbers) answer.push(f(num));
  return answer;
}

function f(x) {
  // 2 로 나뉘어 떨어지면 첫 bit + 1
  if (x % 2 === 0) return x + 1;
      
  let bit = "0" + x.toString(2);
  let idx = bit.lastIndexOf("0");
  return parseInt(`${bit.substring(0, idx)}10${bit.substring(idx + 2)}`, 2);
}

풀이

  • 조건을 이용해 비트를 구하는 solution 구하기

  • 마지막에 0 이 있는 bit 의 index 값 전까지 bit 와
    그 뒤에 2개의 문자를 10 으로 바꾸고 나머지 bit 더해서 반환
profile
일단 한다

0개의 댓글