반응형

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

 

코딩테스트 연습 - 2개 이하로 다른 비트

 

programmers.co.kr

 

해결 방법 : 이진 변환, 수학

  • $2^0$의 자리 수가 0인 경우 : number + 1
  • 그 외 : $2^x$의 자리수까지 1이 연속된다면, number + $2^x$ 
    • ex. number : 1110101111, x = 3

 

def solution(numbers):
    answer = []
    for n in numbers:
        asBin = bin(n)[2:]
        zero_loc = asBin.rfind('0') # 오른쪽부터 첫번째 0 주소값
        
        if asBin[-1] == '0': # 2^0 자리가 0이면, n+1이 정답
            answer.append(n + 1)
        else: # 오른쪽부터) 연속된 1의 마지막 자리 x에 대해, 2^x를 더해줌, ex. if n == 10110111: 2^x = 100
            answer.append(n + (1 << (len(asBin) - zero_loc - 2))) # = n + 2^(len(asBin) - zero_loc - 2)

    return answer
반응형

+ Recent posts