[Python] 프로그래머스(Lv2) - 2개 이하로 다른 비트

Kerri·2021년 5월 21일
2

코테

목록 보기
48/67

안녕하세요 !

https://programmers.co.kr/learn/courses/30/lessons/77885

풀이

문제 예시를 잘보면! 답을 쉽게 구할 수 있습니다.

1) 짝수의 경우
만약, 4라면 이진수로 100 입니다. 4보다 크면서 2개 이하로 다른 수를 찾으면 101 입니다.
즉, 가장 뒤에 있는 0을 1로 바꿔주면 됩니다.

2) 홀수의 경우
만약, 7이라면 이진수로 0111 (바꿀때 편의를 위해 앞에 0을 붙입니다)
먼저 짝수의 경우처럼 가장 뒤에 있는 0의 인덱스(idx)를 찾아 1로 바꿉니다. 그럼 1111 이 됩니다.
bin_number[idx] = '1'
그런 다음 idx+1 의 인덱스 값을 0으로 바꿉니다. 그럼 1011이 되고 답이 됩니다.
bin_number[idx+1] = '0'

def solution(numbers):
    answer = []

    for number in numbers:
        bin_number = list('0' + bin(number)[2:])
        idx = ''.join(bin_number).rfind('0')
        bin_number[idx] = '1'
        
        if number % 2 == 1:
            bin_number[idx+1] = '0'
        
        answer.append(int(''.join(bin_number), 2))

    return answer

파이썬에서는 bin 내장함수로 이진수를 쉽게 구할수 있습니다.
또한, int 내장함수로 int(s, 2)를 해주면 2진수 s를 10진수로 변환줍니다.

자세한 문제 해설

profile
안녕하세요 !

0개의 댓글