728x90
😄아이디어
1. 2진수로 변환 후 가장 앞자리에 '0' 삽입
2. 0을 만나면 현재를 1로 바꾸고 뒷자리는 0으로 수정 👉 현재 수보다는 크면서 가장 작은 수를 유지하려면 가장 큰 숫자를 만들어내는 비트부터 수정해야함.
3. 수정된 숫자를 최소값으로 유지되는 변수 _!min_num!_과 비교하고 반복이 종료되면 결과 리스트에 저장
def solution(numbers):
answer = []
for num in numbers:
binary = list('0' + format(num, 'b'))
min_num = pow(10, 15);
for i, val in enumerate(binary):
if val == '0':
tmp = binary.copy()
tmp[i] = '1'
if i + 1 < len(tmp):
tmp[i + 1] = '0'
min_num = min(min_num, int(''.join(tmp), 2))
answer.append(min_num)
return answer
✔️ 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/77885