나누는 수가 양수인 경우 나머지도 양수로 나오고, 나누는 수가 음수인 경우 나머지도 음수로 나온다.
이 문장을 이해해야 2089를 풀 수 있습니다.
문제를 처음 읽었을 때, 이해를 하지 못했습니다.
다시 한 번 정리하자면, -2진수로 표현할 때 입력값의 변환 결과를 출력하는 문제였습니다.
앞서 언급한 문장을 미루어 살펴보면 -2로 값을 나누면 음수의 나머지가 나온다는 뜻입니다.
하지만 비트 변환을 할 경우, 1 과 0 으로만 표현해야합니다.
문제에 나온 -13을 예시로 들자면
이지만, 나머지가 음수가 나와야하기에
-13 // -2 = 6 , 나머지는 -1 이 나옵니다. 이를 비트 변환하기 위해서는 -1이 아닌 1로 바꿔야하니까 이를 위해서 몫에 1을 더해줘야 합니다. 그렇게 되면 7 * -2 +1 = -13 이 나오기에 문제가 없습니다.
나머지가 나오는 경우에만 이를 처리하면 되고 나머지가 0 인 경우 위와 같이 처리할 경우는 없습니다.
val =int(input())
def extract_val(val):
result_lst = ""
if not val:
return ("0")
while val:
if val % (-2):
result_lst = "1"+result_lst
#print(val//-2, val - -2*(val//-2))
val = val//-2 +1 # 몫에 1을 더해줌으로써 해결
else:
result_lst = "0" + result_lst
val //= -2
return result_lst
result = extract_val(val)
print(result)