코딩/백준

[백준/파이썬/수학] 2745번 진법 변환 코딩테스트 연습풀이 브론즈2

thisisjade 2022. 4. 20. 21:56
728x90

문제 출처: https://www.acmicpc.net/problem/2745

 

2745번: 진법 변환

B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 

www.acmicpc.net

 

문제

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진법으로 출력한다.

 

예제 입력 1

ZZZZZ 36

 

예제 출력 1

60466175

 

정답

b, n = input().split()

n = int(n)
tmp = 0
answer = 0

for i in b[::-1]:
    if i.isnumeric():
        num = int(i)       
    else:
        num = ord(i)-55

    if tmp == 0:
        answer += (num)
    else:
        answer += (num)*(n**tmp)
    tmp +=1
print(answer)

 

1. b, n 입력 후 n을 정수형으로 입력 및 tmp, answer 0으로 세팅

2. for문을 통해 뒤부터 가져와서 if문에서 정수일 경우 정수로 입력, 문자일 경우 아스키코드로 변환후 -55를 하여 입력

3. 밑에 if문에서 tmp가 0일 경우 그냥 num을 더해주고 else일 경우 num*(n**tmp)의 값을 더해줍니다.(진법에 대한 지식이 있으면 바로 알아 들으실 것 같습니다)

4. for문 마다 tmp +=1

5. answer 출력

728x90