카테고리 없음

[Python | 프로그래머스 | Lv_2] 2개 이하로 다른 비트

deedee2 2024. 4. 5. 10:46
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