[백준] 진법 변환

가오리·2023년 1월 17일
0

coding-test

목록 보기
45/107
post-thumbnail

2745번: 진법 변환

🔗 문제

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

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

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



입력

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

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

ZZZZZ 36

출력

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

60466175


💡풀이 방법

☑️ 2진법을 10진법으로 변환하는 경우 생각하기

  • 2진수(1001)를 10진수(9)로 변환하는 과정

    201+210+220+231=1+0+0+8=92^0 *1 + 2^1*0 + 2^2 *0 + 2^3*1 = 1 + 0 + 0 + 8 = 9

  • 위의 과정을 생각할 수 있다면 문제를 풀기 쉬워진다.

  • 336진법에 해당하는 숫자와 알파벳을 담은 문자열을 만들어야 한다.

  • 위의 과정에서보면 숫자의 오른쪽 끝 부분부터 계산하는 것을 알 수 있는데 그러기 위해서 입력받은 문자도 뒤집어야 한다.





💻 코드

# [2745] 진법 변환
number, changeTo = input().split()
number = number[::-1]
result = 0
char = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for i in range(len(number)-1, -1, -1):
    total = char.index(number[i]) * (int(changeTo) ** i)
    result += total 
print(result)
profile
가오리의 코딩일기

0개의 댓글