나의 개발일지

[프로그래머스] Lv.2 2개 이하로 다른 비트 [Python, 파이썬] 본문

프로그래머스

[프로그래머스] Lv.2 2개 이하로 다른 비트 [Python, 파이썬]

YoonJuHan 2023. 12. 29. 15:11
  • 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/77885
  • 🔑 2진수로 변환해서 자리 바꾸기
    • 짝수라면 그 숫자에 +1을 해서 정답에 추가한다.
    • 홀수라면 숫자를 2진수로 바꾸고 50자리까지 남는 자리에 0을 채워준다. (10^15를 2진수로 바꾸면 50자리까지 나와서)
    • 변환된 2진수를 역순으로 순회하면서 처음 0을 만나면 1로 바꿔주고, 바로 오른쪽 값은 0으로 바꿔준다.
    • 7 일 때 2진수로 바꾸면 000...0111
    • 처음 0으로 만났을 때 값을 바꿔주면 000...1011
    • 이렇게 자리를 바꾼 2진수를 다시 10진수로 변환해서 정답에 추가하면 끝 ✨

 

def solution(numbers):
    answer = []

    for n in numbers:
        if n % 2 == 0:                          # 짝수면
            answer.append(n+1)                  # 이 값에 +1
        else:
            bit = list(bin(n)[2:].zfill(50))    # 50자리까지 0으로 채움
            for i in range(len(bit)-1, -1, -1): # 역순 순회
                if bit[i] == '0':               # 0만나면
                    bit[i] = '1'                # 자리 바꾸기
                    bit[i+1] = '0'              # 자리 바꾸기
                    break
            answer.append(int("".join(bit), 2)) # 2진수를 10진수로 변환
    
    return answer
Comments