문제 설명 및 제한사항
아이디어 및 해결 방법
코드
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)
Python
복사
출처
프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges