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
1 -> 1
2 -> 110 = 4 -2 0
3 -> 111 = 4 -2 1
4 -> 100
5 -> 101
6 -> 11010 = 16 -8 -2
7 -> 11011 = 16 -8 -2 1
8 -> 11000 = 16 -8
9 -> 11001 = 16 -8 1
10 -> 11110 = 16 -8 4 -2
13 -> 11101 = 16 -8 4 1
-13 -> 110111 = -32 16 2 1
-2라서 어떻게 푸는가 했는데 2진수나 8진수처럼 똑같이 -2로 값을 나누면 됐었다 결국엔 진수였던것..!
몫이 0이 나올때까지 진행하면 110111이 나오게 된다
-13 ÷ -2 = 7 ... 1
7 ÷ -2 = -3 ... 1
-3 ÷ -2 = 2 ... 1
2 ÷ -2 = -1 ... 0
-1 ÷ -2 = 1 ... 1
1 ÷ -2 = 0 ... 1
import sys
from collections import deque
n = int(sys.stdin.readline())
result = deque()
while n:
result.appendleft(n % (-2))
n //= (-2)
print(*result, sep="")
나머지에 왜 1이아니라 -1이 나오고 왜 자릿수는 6개가 아니라 5개인가..?
확인해보니 2가지 오류가 있었다.
1. 파이썬에서 음수로 나누면 -2의 경우 0, -1이 나와 나의 의도대로 나머지가 나오지 않음
2. -13 // -2 결과가 7이 아니라 6으로 나와 몫에 +1을 해줘야함
그렇게 완성된 코드!
import sys
from collections import deque
n = int(sys.stdin.readline())
result = deque()
if n == 0: # 0일때도 입력 필수!
print(0)
while n:
if n % (-2): # 나머지 1일때
result.appendleft(1)
n = n//(-2) + 1 # -13 // -2 = 6.5 -> 6이라 +1
else: # 나머지 0일때
result.appendleft(0)
n = n//(-2)
print(*result, sep="")
'공부 > 알고리즘' 카테고리의 다른 글
[알고리즘][백준] 1463번 1로 만들기 - 파이썬(python) 풀이 (0) | 2024.03.04 |
---|---|
[알고리즘][백준] 17103번 골드바흐 파티션 - 파이썬(python) 풀이 (0) | 2024.03.03 |
[알고리즘][백준] 1373번 2진수 8진수 - 파이썬(python) 풀이 (0) | 2024.03.01 |
[알고리즘][백준] 17087번 숨바꼭질 6 - 파이썬(python) 풀이 (2) | 2024.03.01 |
[알고리즘][백준] 9613번 GCD 합 - 파이썬(python) 풀이 (1) | 2024.02.29 |