문제

주어진 수보다 크지만 이진수로 변환했을때 비트가 다른 지점이 2개 이하인 수를 구하기.

풀이

def solution(numbers):
    result = []

    for num in numbers:
        if num % 2 == 0:
            # 짝수의 경우 무조건 오른쪽 마지막 숫자가 0이다.
            result.append(num + 1)
        else:
            # 홀수의 경우 가장 마지막에 있는 0자리수를 찾아야 한다.
            bnum = bin(num)[2:]
            n = len(bnum)
            idx = bnum.rfind('0')
            result.append(num + (1 << (n - idx - 1)) - (1 << (n - idx - 2)))
    return result

알게된 점