반응형
![](https://blog.kakaocdn.net/dn/cC2gOC/btr9GikcbA4/JhfgbaTJo4iTh50HiSY3e0/img.png)
2진수 다국어
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
2 초 | 128 MB | 9798 | 4571 | 3748 | 45.663% |
문제
- 2진법은 부호 없는 2진수로 표현이 된다. 2진법에서는 2, 2, 2, 2이 표현 되지만 -2진법에서는 (-2)⁰ = 1, (-2)¹ = -2, (-2)² = 4, (-2)³ = -8을 표현한다. 10진수로 1부터 표현하자면 1, 110, 111, 100, 101, 11010, 11011, 11000, 11001 등이다. 10진법의 수를 입력 받아서 -2진수를 출력하는 프로그램을 작성하시오.
입력
첫 줄에 10진법으로 표현된 수 N이 주어진다.
출력
- 2진법 수를 출력한다.
제한
- 2,000,000,000 ≤ N ≤ 2,000,000,000
예제 입력 1
-13
예제 출력 1
110111
풀이
1)
2)
def to_negative_base_2(n):
if n == 0:
return "0"
result = []
while n:
n, remainder = divmod(n, -2)
if remainder < 0:
remainder += 2
n += 1
result.append(str(remainder))
return "".join(result[::-1])
n = int(input())
print(to_negative_base_2(n))
- 풀이과정
def to_negative_base_2(n):
: -2진법으로 변환하는 함수to_negative_base_2
를 정의합니다. 입력 인자로 10진수 숫자n
을 받습니다.
if n == 0:
: 입력된 숫자n
이 0인 경우를 확인합니다.
return "0"
:n
이 0이면 -2진법으로 변환할 필요 없이 "0"을 반환합니다.
result = []
: -2진법의 자릿수를 저장할 빈 리스트result
를 생성합니다.
while n:
:n
이 0이 아닐 동안 반복문을 실행합니다.
n, remainder = divmod(n, -2)
:n
을 -2로 나눈 몫과 나머지를 동시에 계산하고, 각각n
과remainder
에 할당합니다.
if remainder < 0:
: 나머지remainder
가 음수인 경우를 확인합니다.
remainder += 2
: 음수인 나머지에 2를 더해 양수로 만듭니다.
n += 1
:n
에 1을 더해 다음 반복에서 올바른 몫을 얻을 수 있도록 조정합니다.
result.append(str(remainder))
: 계산된 나머지를 문자열 형태로result
리스트에 추가합니다.
return "".join(result[::-1])
:result
리스트의 요소들을 역순으로 연결한 문자열을 반환합니다.
코드 실행:
n = int(input())
: 사용자로부터 10진수 숫자를 입력받아 정수로 변환한 후,n
에 할당합니다.
print(to_negative_base_2(n))
:to_negative_base_2
함수를 사용하여n
을 -2진법으로 변환하고 결과를 출력합니다.
3)
def go(n):
if n == 0:
return
if n % 2 == 0:
go(-(n//2))
print(0,end='')
else:
if n > 0:
go(-(n//2))
else:
go((-n+1)//2)
print(1,end='')
n = int(input())
if n == 0:
print(0)
else:
go(n)
- 풀이과정
def go(n):
: -2진법 변환을 위한 재귀 함수go
를 정의합니다. 입력 인자로 10진수 숫자n
을 받습니다.
if n == 0:
: 입력된 숫자n
이 0인 경우를 확인합니다.
return
:n
이 0이면 -2진법 변환을 종료합니다.
if n % 2 == 0:
: 입력된 숫자n
이 짝수인 경우를 확인합니다.
go(-(n//2))
:n
을 -2로 나눈 몫을 다음 재귀 호출에 전달합니다.
print(0, end='')
: 짝수인 경우, -2진법 자릿수에 0을 출력합니다.
else:
: 입력된 숫자n
이 홀수인 경우를 처리합니다.
if n > 0:
:n
이 양수인 경우를 확인합니다.
go(-(n//2))
:n
을 -2로 나눈 몫을 다음 재귀 호출에 전달합니다.
else:
:n
이 음수인 경우를 처리합니다.
go((-n+1)//2)
:n+1
을 2로 나눈 몫을 다음 재귀 호출에 전달합니다.
print(1, end='')
: 홀수인 경우, -2진법 자릿수에 1을 출력합니다.
- 코드 실행
n = int(input())
: 10진수 숫자를 입력받아 정수로 변환한 후,n
에 할당합니다.
if n == 0:
: 입력된 숫자n
이 0인 경우를 확인합니다.
print(0)
:n
이 0이면 -2진법으로 변환할 필요 없이 0을 출력합니다.
else:
: 입력된 숫자n
이 0이 아닌 경우를 처리합니다.
go(n)
: 재귀 함수go
를 호출하여n
을 -2진법으로 변환하고 결과를 출력합니다.
Uploaded by N2T
반응형
'Algorithm' 카테고리의 다른 글
[백준 1212 파이썬/python] 8진수 2진수 (0) | 2023.04.12 |
---|---|
[백준 17103 파이썬/python] 골드바흐 파티션 (0) | 2023.04.12 |
[백준 1212 파이썬/python] 8진수 2진수 (0) | 2023.04.12 |
[백준 1373 파이썬/python] 2진수 8진수 (0) | 2023.04.11 |
[백준 17087 파이썬/python] 숨박꼭질 6 (0) | 2023.04.10 |