CODING TEST/Beakjoon

[백준 / 파이썬 / 2745] 진법 변환

더라 2023. 10. 27. 02:32
728x90

문제

문제 보러가기

[백준] 2745 - 진법 변환

 

2745번: 진법 변환

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

www.acmicpc.net

 

입출력

입력 b진법으로 표현된 수 n, 진법b
출력 n을 10진수로 표현한 수

 

 


 

풀이

n, b = input().split()
b = int(b)

answer = 0

# len(n) = 5인 경우 4 ~ 0까지 반복 
for i in range(len(n)-1, -1, -1):
    # 아스키코드를 사용해 현재 문자가 숫자가 아닌 경우 경우 문자 -> 숫자 변환
    if ord(n[i]) >= 65:
        tmp = ord(n[i]) % 65 +10
    else: tmp = n[i]

    tmp = int(tmp)
    # 글자의 위치와 제곱할 수는 반비례
    # 3글자 n일 때 맨 오른쪽 글자인 경우, n[2]일때 제곱할 수 0 -> n[1]일때 1 -> n[0]일때 2 
    mid_tmp = b**(len(n)-i-1)
    answer += mid_tmp * tmp
print(answer)

1) b진법으로 이뤄진 수 n과, 진법 n

2) n을 오른쪽부터 한글자씩 계산한다.

2.1) 만약 A~Z로 이뤄진 글자라면 숫자로 변환한다. 이는 아스키코드를 사용해 확인한다.

(변환 A: 10 ~ Z: 35)

3) (진법 ** 자릿수 * 해당 자리 숫자)계산방법으로 모든 b진법내의 숫자를 계산에 answer에 더한다.

3.1) 문자열의 자릿수롸 진법의자릿수는 반비례관계이다.

표로 정리해 참고해보면 아래와 같다.👇

36진법으로 표현한 ZZZZZ

 

728x90