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

최동혁·2022년 12월 24일
0

프로그래머스

목록 보기
36/68

풀이 방법

짝수는 무조건 뒤의 수가 0이다.
그렇기 때문에 1을 증가 시켜도 서로 비트가 1개밖에 차이가 나지 않아서 +1 한 수가 정답이다.
홀수는?
예를 들면 10001111이 있다고 치자
그렇다면 1을 증가시키면 10010000으로 엄청 달라지게 된다.
그래서 가장 나중에 나오는 0을 찾는다.
그리고 그 뒤에는 무조건 1이 나오기 때문에 01을 10으로 바꾸어 준다.
그렇게 되면 다른 비트 수의 차이가 2이하이면서 가장 최소의 숫자가 나오게 된다.

풀이 코드

def solution(numbers):
    answer = []
    for i in numbers:
        if i % 2 == 0:
            answer.append(i + 1)
        else:
            a = str(format(i, 'b'))
            zero_list = []
            for j in range(len(a)):
                if a[j] == "0":
                    zero_list.append(j)
            if not zero_list:
                ans = "10" + a[1:]
                answer.append(int(ans, 2))
            else:
                ans = a[:zero_list[-1]] + "10"
                if len(a) > zero_list[-1] + 2:
                    ans += a[zero_list[-1] + 2 :]
                answer.append(int(ans, 2))
    return answer
profile
항상 성장하는 개발자 최동혁입니다.

0개의 댓글