2089 파이썬

Lee Hyun Joon ·2022년 7월 8일

알고리즘정리

목록 보기
4/17

문제 공부 정리를 하고자 작성했습니다

파이썬은 음수의 나눗셈에 대해서 신기한 점이 있습니다

나누는 수가 양수인 경우 나머지도 양수로 나오고, 나누는 수가 음수인 경우 나머지도 음수로 나온다.

이 문장을 이해해야 2089를 풀 수 있습니다.
문제를 처음 읽었을 때, 이해를 하지 못했습니다.
다시 한 번 정리하자면, -2진수로 표현할 때 입력값의 변환 결과를 출력하는 문제였습니다.
앞서 언급한 문장을 미루어 살펴보면 -2로 값을 나누면 음수의 나머지가 나온다는 뜻입니다.
하지만 비트 변환을 할 경우, 1 과 0 으로만 표현해야합니다.

문제에 나온 -13을 예시로 들자면
13/2=6.5-13 / -2 = 6.5 이지만, 나머지가 음수가 나와야하기에
-13 // -2 = 6 , 나머지는 -1 이 나옵니다. 이를 비트 변환하기 위해서는 -1이 아닌 1로 바꿔야하니까 이를 위해서 몫에 1을 더해줘야 합니다. 그렇게 되면 7 * -2 +1 = -13 이 나오기에 문제가 없습니다.
나머지가 나오는 경우에만 이를 처리하면 되고 나머지가 0 인 경우 위와 같이 처리할 경우는 없습니다.

val =int(input())
def extract_val(val):
    result_lst = ""
    if not val:
        return ("0")
    
    while val:
        if val % (-2):
            result_lst = "1"+result_lst
            #print(val//-2, val - -2*(val//-2))
            val = val//-2 +1 # 몫에 1을 더해줌으로써 해결
        else:
            result_lst = "0" + result_lst
            val //= -2
    
    return result_lst
result = extract_val(val)
print(result)
profile
우당탕탕 개발 지망생

0개의 댓글