title: "[프로그래머스] 다음 큰 숫자 Python 파이썬 해설 (Level 2) - 이도훈"
cleanUrl: "programmers/12911"
description: "프로그래머스 Level 2 문제 [다음 큰 숫자]의 풀이를 정리합니다."

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

def solution(n):
    b = list(bin(n).replace('0b', '').rjust(20, '0'))
    
    # 이진수의 오른쪽에서 왼쪽으로 오면서 '01'을 찾아서 '10'으로 바꿉니다.
    i = len(b) - 2
    while i >= 0 and b[i:i+2] != ['0', '1']:
        i -= 1
    b[i], b[i+1] = '1', '0'
    
    # index i+1 뒤의 1의 개수를 세어서, 이진수의 맨 뒤로 붙입니다.
    num1 = b[i+1:].count('1')
    new = ['0'] * (len(b[i+1:]) - num1) + ['1'] * num1
    
    answer = b[:i+1] + new
    return int(''.join(answer), 2)

출처

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