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