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
풀이 과정
10진수 13을 2진수로 바꾸는 방법이 위와 같듯, 어떤 수를 -2진수로 바꾸려면 동일한 과정을 진행해주면 된다 예시를 보자.
단, 언어마다 음수로 나눴을때의 나머지가 나오는 경우가 다를 수 있으므로, 위의 그림과 같은 나머지가 나오도록 적절히 조정해주어야 한다.
파이썬에서는 나누어지는 수가 음수인지 양수인지에 따라 결과를 달리 해줘야 한다.
소스 코드
def divide(n, ans):
if n == 0:
ans.append(0)
return
if n == 1:
ans.append(1)
return
if n % 2 == 0:
ans.append(0)
divide(n // -2, ans)
elif n < 0:
ans.append(1)
divide((n // -2) + 1, ans)
else:
ans.append(1)
divide((n // -2) + 1, ans)
N = int(input())
answer = []
divide(N, answer)
answer.reverse()
print(f'{"".join(str(i) for i in answer)}')
'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글
백준 1463 - 1로 만들기 [파이썬] (0) | 2022.04.07 |
---|---|
백준 17103 - 골드바흐 파티션 [파이썬] (0) | 2022.04.07 |
백준 1212 - 8진수 2진수 [파이썬] (0) | 2022.04.07 |
백준 1373 - 2진수 8진수 [파이썬] (0) | 2022.04.07 |
백준 17087 - 숨바꼭질 6 [파이썬] (0) | 2022.04.07 |