[백준] 2745,11005 : 진법 변환 (python/파이썬)

Dan·2023년 6월 8일
0

백준

목록 보기
5/6
post-thumbnail

진법 변환 - 2745

문제 링크

성능 요약

메모리: 113112 KB, 시간: 120 ms

분류

구현, 문자열, 수학

문제 설명

B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.

10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.

A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35

입력

첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)

B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.

출력

첫째 줄에 B진법 수 N을 10진법으로 출력한다.

a,b = input().split()

## 36진법 변환 가장 쉬운방법
# print(int(a, int(b)))

## 좀 어렵지만 이론적인 방법
num_list = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
a = a[::-1]
b = int(b)
answer = 0
for index, num in enumerate(a):
   answer += (num_list.index(num)*(b**index))

print(answer)

진법 변환 2 - 11005

문제 링크

성능 요약

메모리: 113112 KB, 시간: 116 ms

분류

구현, 수학

문제 설명

10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.

10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.

A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35

입력

첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.

출력

첫째 줄에 10진법 수 N을 B진법으로 출력한다.

a,b = map(int,input().split())

## 좀 어렵지만 이론적인 방법
## a가 0이 될떄까지 b로 나눠준다
## a/b로 나눴을때 나오는 나머지가 알파벳이다
## 진법계산을 반대로했으므로 마지막에 역순으로 출력해주는 작업이 필요하다.
num_list = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
s = ""
while a:
    s += str(num_list[a%b])
    a //= b
11
print(s[::-1])

profile
만들고 싶은게 많은 개발자

0개의 댓글