프로그래밍/백준

[알고리즘] 백준 2089 파이썬 - -2진수

매 석 2023. 3. 21. 22:50
반응형

 

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

문제

-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, 11011, 11000, 11001 등이다.

10진법의 수를 입력 받아서 -2진수를 출력하는 프로그램을 작성하시오.

 

문제풀이

n=int(input())
res=""
#01
if n==0:
    print('0')
    quit()
else:
    while n:
    	#02
        if n%(-2):
            res="1"+res
            n=n//-2+1
        #03
        else:
            res='0'+res
            n//=-2
print(res)

- #01 : 만약 n 값이 0이라면 "0"을 출력한다.

- #02 : -2진수로 나타내기 위해 -2로 나눈 나머지가 있다면 

           res="1"+res를 해준다.

          이후 n=n//-2+1을 해준다. EX) -13 / -2 -> 몫: 7, 나머지: +1

          n=n//-2를 진행할 경우 -13//-2 -> 6.5 -> 6이 나오게 된다. 그래서 +1을 해준다.

- #03 : 만약 -2로 나누어 떨어진 경우는

           res="0"+res을 해주고 n을 -2로 나눈 몫을 저장한다.

           n이 0이 될 때까지 반복해준 후 while문이 종료되면 res를 출력한다.