처음에 규칙을 찾아서 조건문 분기로 풀어보려 했으나, 쉽지 않았다
이 문제는 그냥 1) 1의 개수가 이진수의 길이와 같은 경우(이진수가 모두 1로 이루어짐), 2) 1의 개수가 이진수의 길이와 같지 않은 경우(이진수가 0과 1로 이루어짐)로 나누어서 풀면 된다
def solution(n):
bin_n = list(bin(n)[2:])
one_cnt = bin_n.count('1')
if one_cnt == len(bin_n):
answer = [1] * (len(bin_n)+1); answer[1] = 0
return int(''.join(map(str, answer)), 2)
else:
while True: #n에 1을 더해주면서 조건을 만족하는 가장 작은 수 출력
n += 1
if list(bin(n)[2:]).count('1') == one_cnt:
return int(''.join(map(str, bin(n)[2:])), 2)