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

gomanbo·2023년 8월 10일
0

⭐⭐ 문제


📌 문제 설명

  • x보다 크고 x와 비트가 1~2개 다른 수들 중에서 제일 작은 수 return
  • f(2) = 3
    2 000...0010
    3 000...0011 1
  • f(7) = 11
    7 000...0111
    11 000...1011 2

### 📌 문제 풀이

  1. 짝수 - 마지막이 무조건 0이기 때문에!! 2 (0010) 끝에 0 -> 1 바꿔주면 된다.
  2. 홀수
    1) 0을 찾는다. 홀수라면 그다음이 무조건 1이겠지
    2) "01"을 제거하고 "10"을 넣어준다

📌 코드

function solution(numbers) {
  let answer = [];
  for (let i = 0; i < numbers.length; i++) {
    let current = numbers[i];
    if (current % 2 === 0) {
      // 숫자가 짝수일 때
      answer.push(current + 1); // 1을 더한 값을 answer에 추가한다.
    } else {
      // 숫자가 홀수일 때
      current = "0" + current.toString(2);
      let totalLength = current.length;
      for (let j = totalLength - 1; j >= 0; j--) {
        if (+current[j] === 0) {
          // 0이 처음 나오는 자릿수를 찾는다
          answer.push(
            parseInt(
              current.substring(0, j) +
                "10" +
                current.substring(j + 2, totalLength),
              2
            ) // 01을 제거하고 10을 넣어 해당 이진수를 숫자로 변환
          );
          break;
        }
      }
    }
  }

  return answer;
}
profile
ㅎ.ㅎ

1개의 댓글

comment-user-thumbnail
2023년 8월 10일

많은 도움이 되었습니다, 감사합니다.

답글 달기