실버 4라 얕보고 들어갔다가 크게 혼났다. 문제 이해하는 데에는 오래 걸리지 않았다. 2진수인데 -2진수 인 것이다. 이거 저거 하면서 규칙을 찾아보려 하다가, 도저히 모르겠어서 질문 검색으로 가서 약간의 팁을 들었다. -2진 수라 너무 쫄지 말고 그냥 2진수 풀던 것처럼 풀면 된다는 것이었다. 대신에 -2로 숫자를 나누면 나머지가 0,1,-1 이 3개가 나올 수 있으니 -1의 나머지가 나오는 경우에는 몫에 1을 더해줘서 나머지를 1로 만들어 줘야 한다는 것이 포인트였다. 사실 진법에 대한 이해가 빠삭했다면 이 부분은 충분히 생각해 낼 수 있었을 것이다. 하지만, 진법에 대한 이해가 빠삭하지 못해 이 부분을 생각해내는데 좀 걸렸다..
import sys
import math
a = int(sys.stdin.readline())
answer = ''
while(True):
if a % -2 == -1:
a = (a//-2)+1
answer += '1'
elif a % -2 == 0:
a = a//-2
answer += '0'
if a == 1:
answer += '1'
break
print(answer[::-1])
그냥 -2로 나눴을 때 -1이 나오는 경우만 처리해주면 2진수 변환하는 것처럼 문제를 풀어줄 수 있다.
'Study > Python' 카테고리의 다른 글
백준 10844 (Python 파이썬) (0) | 2022.01.10 |
---|---|
백준 15990 (Python 파이썬) (1) | 2022.01.10 |
백준 1654 (Python 파이썬) (0) | 2022.01.01 |
Boj_17298 (Python 파이썬) (0) | 2021.12.28 |
Boj_1406 (Python 파이썬) (0) | 2021.12.23 |