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

수경·2023년 5월 4일
0

problem solving

목록 보기
141/174

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

풀이

  1. 짝수인 경우 1을 더해주면 하나의 비트만 다른 가장 작은 수가 됨 (짝수는 마지막 비트가 무조건 0이기 때문)
    ex) 100(4) -> 101(5)
    ex) 1010(10) -> 1011(11)
  2. 홀수의 경우 뒤에서부터 봤을 때 가장 처음 나오는 0을 1로 전환 후 다음 비트를 0으로 전환하면 됨
    ex1) 1001(9) -> 1010(10)
    ex2) 0111(7) -> 1011(11)

홀수의 경우 수학적으로 비트연산을 해서 구할 방법이 있는 것 같은데 도저히 모르겠어서 string으로 01->10 전환함


코드

def solution(numbers):
    answer = []
    
    for i in numbers:
        if i % 2 == 0:
            answer.append(i + 1)
        else:
            tmp = bin(i)[2:]
            idx = tmp.rfind('0')
            if (idx == -1):
                tmp = '10' + tmp[1:]
            else:
                tmp = tmp[0:idx] + '10' + tmp[idx+2:]
            answer.append(int(tmp, 2))
    return answer
profile
어쩌다보니 tmi뿐인 블로그😎

0개의 댓글