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
문제
-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, 11011, 11000, 11001 등이다.
10진법의 수를 입력 받아서 -2진수를 출력하는 프로그램을 작성하시오.
숫자 | -32 | 16 | -8 | 4 | -2 | 1 |
1 | 1 | |||||
2 | 1 | 1 | 0 | |||
3 | 1 | 1 | 1 | |||
4 | 1 | 0 | 0 | |||
5 | 1 | 0 | 1 | |||
6 | 1 | 1 | 1 | |||
7 | 1 | 1 | 1 | 1 | ||
8 | 1 | 1 | ||||
9 | 1 | 1 | 1 |
-13 = -2 x 7 + 1
7 = -2 x -3 + 1
-3 = -2 x 2 + 1
2 = -2 x -1 + 0
-1 = -2 x 1 + 1
1 = -2 x 0 + 1
=> 110111
-4 = -2 x 2 + 0
2 = -2 x -1 + 0
-1 = -2 x 1 + 1
1 = -2 x 0 + 1
=> 1100
-1 = -2 x 1 + 1
1 = -2 x 0 + 1
나눠주는 값을 확인해보았다.
print(-13//-2)
print(13//-2)
print(-13//2)
print(-13/-2)
print(13/-2)
print(-13/2)
근데, 이제 값이 각각 6, -7, -7이 나오는 것을 확인했다.
print(-13%-2)
print(13%-2)
print(-13%2)
이 값은 -1, -1, 1이 나온다. 근데 다행이도, 우리는 계속 -2로 나눠줄 것이기 때문에 신경쓸 일이 없다!
삽질
+ 오래 걸렸는데, 그 이유가,, 나는 -1이 1이고,, 그런건줄 알았다.. -2가 110이고,, 그래서 굉장히 헷갈렸는데, 그냥 글을 잘못 읽은 것,, 나는 바보,,
+ 틀렸습니다 이유로는 0을 넣어줬을 때의 처리가 없었다.
정답 코드
num = int(input())
result = ''
if(num == 0):
print("0")
else:
while (num):
if ((num % (-2)) == 0):
num = num // -2
result = '0' + result
else:
result = '1' + result
num = num // -2 + 1
print(result)
'공부 > 백준\BeakJoon' 카테고리의 다른 글
[BEAKJOON] 백준 17298번 : 오큰수 - 파이썬 (0) | 2023.07.21 |
---|---|
[BEAKJOON] 백준 1212번 : 8진수 2진수 (0) | 2023.07.20 |
[백준/BEAKJOON] 17103번 골드바흐 파티션 (0) | 2023.07.18 |
[BEAKJOON] 백준 1676번 : 팩토리얼 0의 개수 (0) | 2023.07.17 |
[BEAKJOON] 백준 2004번 : 조합 0의 개수 (0) | 2023.07.16 |