본문 바로가기
알고리즘/[python] 백준 BOJ

[Python] 백준 2089 -2진수

by Alan_Kim 2022. 12. 20.
728x90
반응형

https://www.acmicpc.net/problem/2089

 

2089번: -2진수

-2진법은 부호 없는 2진수로 표현이 된다. 2진법에서는 20, 21, 22, 23이 표현 되지만 -2진법에서는 (-2)0 = 1, (-2)1 = -2, (-2)2 = 4, (-2)3 = -8을 표현한다. 10진수로 1부터 표현하자면 1, 110, 111, 100, 101, 11010, 110

www.acmicpc.net

 

문제 해결

n이 주어졌을 때

n을 -2로 계속 나누어서 정답을 알아낼 수 있다.

ex) n = -13

-13 = (-2)*7 + 1

7 = (-2)*(-3) +1

-3 = (-2)*2 +1

2 = (-2)*(-1) + 0

-1 = (-2)*1 + 1

1 = (-2)*0 + 1

=> 110111

몫이 0이 될때까지 반복문을 쓰면 될 것이다.

그럼 n= 0일때는? 따로 빼주어서 0을 출력하도록 만들면 될 것이다.

import sys
input = sys.stdin.readline

def solve(n):
    if n ==0:
        return 0
    ans =''
    while n:
        if n%(-2):
            ans = '1'+ans
            n = n//(-2) +1
        else:
            ans = '0' + ans
            n = n//(-2)
    return ans
if __name__=='__main__':
    n = int(input())
    print(solve(n))
728x90
반응형

댓글