title: "[프로그래머스] 2개 이하로 다른 비트 Python 파이썬 해설 (Level 2) - 이도훈"
cleanUrl: "programmers/77885"
description: "프로그래머스 Level 2 문제 [2개 이하로 다른 비트]의 풀이를 정리합니다."

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

def solution(numbers):
    answer = []
    for number in numbers:
        b = list(bin(number).replace('0b', ''))

        # 이진수를 거꾸로 읽으면서 처음 만나는 0과 그 앞의 1을 1과 0으로 바꾼다.
        found = False
        for i in range(len(b) - 1, -1, -1):
            bit = b[i]

            # 예외처리: 0이 맨 뒤에 나오는 경우
            if i == len(b) - 1 and bit == '0':
                b[i] = '1'
                found = True
                break
                
            elif bit == '0':
                b[i] = '1'
                b[i+1] = '0'
                found = True
                break

        # 예외처리: 0이 없는 경우    
        if not found:
            b[0] = '0'
            b = ['1'] + b
        
        answer.append(int(''.join(b), 2))
    
    return answer

출처

프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges