[Programmers] Lv2. 2개 이하로 다른 비트

Smiling Sammy·2022년 7월 18일
0

coding-test

목록 보기
37/38

문제 설명

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

  • x보다 크고 x와 비트가 1~2개 다른 수들 중에서 제일 작은 수

예를 들어,

  • f(2) = 3 입니다. 다음 표와 같이 2보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 3이기 때문입니다.

  • f(7) = 11 입니다. 다음 표와 같이 7보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 11이기 때문입니다.

정수들이 담긴 배열 numbers가 매개변수로 주어집니다. numbers의 모든 수들에 대하여 각 수의 f 값을 배열에 차례대로 담아 return 하도록 solution 함수를 완성해주세요.

제한 사항

  • 1 ≤ numbers의 길이 ≤ 100,000
  • 0 ≤ numbers의 모든 수 ≤ 1015

입출력 예

코드

def solution(numbers):
    answer = []
    for number in numbers:
        num = list('0' + bin(number)[2:])
        idx = ''.join(num).rfind('0')
        num[idx] = '1'

        if number % 2 == 1:
            num[idx + 1] = '0'

        answer.append(int(''.join(num), 2))

    return answer
profile
Data Scientist, Data Analyst

0개의 댓글