삽집하는 개발들/알고리즘

[110일차] -2진수 - 백준 - 2089(python - 수학, 정수론)

악투 2024. 1. 19. 17:10
반응형

문제 설명

-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진수를 출력하는 프로그램을 작성하시오.

 

입력

첫 줄에 10진법으로 표현된 수 N이 주어진다.

 

출력

-2진법 수를 출력한다.

 

예제 입력, 예제 출력

-13 110111

 

코드 및 설명

n = int(input())
answer = []

while True:   
  if n == 0:
    answer.append(0)
    break
  
  if n == 1:
    answer.append(1)
    break
  
  if n % 2 == 0:
    answer.append(0)
    n = n // -2
  else:
    answer.append(1)
    n = (n // -2) + 1

print("".join(str(answer[i]) for i in range(len(answer)-1, -1, -1)))

 

이 문제는 10진수를 -2진수로 출력하는 문제이다.

 

예제의 -13을

 

-2 | -13

-2 | 7  ---------- 1

-2 | -3 ---------- 1

-2 | 2  ---------- 1

-2 | -1 ---------- 0

      1   ---------- 1

 

답은 110111이다. 

 

-13을 계속 -2로 나눠주면서 나머지값을 확인하고 나머지가 0이면 0을 넣어주고, 0이 아니면 1을 넣어주면 된다.

 

그 후 역순으로 보여주면 답을 구할 수 있다.

 

 

 

 

 

반응형