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

KYUNG HWAN·2021년 9월 21일
0

Algorithm

목록 보기
16/18
post-thumbnail

🧑🏻‍💻 문제링크

문제풀이

탐욕 알고리즘을 사용하여 푸는 문제이다. 문제를 보면 패턴 같은 것이 주어지는 데 만약, 7인 숫자를 2진수로 나타내면 0111로 표현할 수 있다. 여기서 7보다 크고 비트가 1~2 개로 다른 수들 중에서 제일 작은 수는 맨 앞에 0과 1을 1과 0으로 바꿔주면 된다.

즉, 10진수를 2진수로 바꾸었을 때 오른쪽에서부터 가장 가까운 0을 찾고 1로 바꿔주면 되는데 홀 수 같은 경우에는 0이 위치한 곳 + 1(왜냐하면 비트가 다른 수 중에서 제일 작은 수를 구해야 하기 때문에)에 1을 대입해주면 된다.

문제를 풀면서 다시 익힐 수 있던 부분은 2진수를 만들 때 bin() 함수 대신에 format(n, 'b')를 이용해서 풀면 리스트의 형태로 쉽게 만들 수 있고 다시 2진수를 10진수로 만들 때 int(n, 2)로 해주면 된다는 것이다.

진짜 프로그래머스는... 아이큐의 문제야...😂

코드

def solution(numbers):
    answer = []

    for num in numbers:
        # 2진수로 만들어줌
        binary = list('0' + format(num, 'b'))

        # 오른쪽에서부터 0이 어디에 위치해 있는지 찾음
        temp = ''.join(binary).rfind('0')
        binary[temp] = '1'

        # num이 홀수이면
        if num % 2 == 1:
            binary[temp+1] = '0'

        # 2진수를 다시 10진수로 변환
        answer.append(int(''.join(binary), 2))
        
    return answer

결과

profile
내가 그린 기린 그림

0개의 댓글