본문 바로가기
Study/Python

백준 2089 (Python 파이썬)

실버 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