본문 바로가기

algorithm/백준알고리즘

[백준알고리즘] 2745번: 진법 변환 -Python

728x90

[백준알고리즘] 2745번: 진법 변환 -Python

https://www.acmicpc.net/problem/2745

 

2745번: 진법 변환

B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다. A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35

www.acmicpc.net

주어진 진법과 수를 10진수로 바꾸는 문제이다.

 

이번 문제에서는 A~Z를 확인하기 위해서 각 인덱스의 character마다 정수인지 확인하기 위해서 isdigit()을 사용했다. 숫자일 경우 그대로 int()를 씌워서 숫자로 만들었다. A~Z에 해당하는 값은 아스키코드 값에 65~90에 해당하는 값들이기 때문에 10~35의 값을 의미하기 위해서 55를 빼주었다. 이 과정에서 문자를 아스키 값(10진수)으로 바꾸는 ord() 메서드를 사용했다.

 

반대역할을 사용하는 chr()을 사용한 문제는 11005번 진법 변환 2 이다.

import sys

before, base = sys.stdin.readline().split()
base = int(base)

cnt, res = 0, 0
for c in before[::-1]:
    target = int(c) if c.isdigit() else ord(c) - 55
    res += (target * (base**cnt))
    cnt += 1

sys.stdout.write(str(res))

 

잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다

728x90