728x90
반응형
핵심 포인트
- 진법 변환
제출코드
N, B = input().split()
dec = 0
for digit, n in enumerate(N):
if ord(n) >= 65: dec += (ord(n) - 55) * (int(B) ** (len(N) - digit - 1))
else: dec += int(n) * (int(B) ** (len(N) - digit - 1))
print(dec)
해설
이 문제를 풀기 위해서는 진법 변환의 개념을 알고 있어야합니다. 가장 간단한 이진법을 생각해보죠. 1001이라는 이진법 수가 들어왔을 때 이를 10진법으로 변환하는 방법은 다음과 같습니다.
$$1 \times 2^{3} + 0 \times 2^{2} + 0 \times 2^{1} + 1 \times 2^{0} = 9$$
이와 같이 해당 자리수의 숫자에 진법의 자리수 $B^{n}$을 곱한 뒤 합하면 10진법으로 변환된 결과를 얻을 수 있습니다. 위 문제에서는 10~36 사이의 숫자는 A~Z로 변환해서 표현합니다. 따라서, 숫자에 문자가 포함되어있기 때문에 이 부분만 신경쓰면 됩니다.
먼저, 숫자 N와 진법 B를 입력받습니다. 그리고 10진법으로의 변환 결과인 dec를 0으로 초기화해놓습니다. 그리고 숫자 N을 enumerate 함수와 함께 순회합니다. 이때, 해당 자리수의 숫자 n이 문자라면 아스키코드로 변환했을 때 숫자가 65보다 클 것 입니다. 반대로 숫자라면 그냥 바로 int(n)을 이용해서 변환해주면 됩니다.
참고자료 및 그림출처
728x90
반응형
'Programming > Coding Problem' 카테고리의 다른 글
BOJ 2720번: 세탁소 사장 동혁 (0) | 2023.05.23 |
---|---|
BOJ 11005번: 진법 변환 2 (0) | 2023.05.22 |
BOJ 2563번: 색종이 (0) | 2023.05.21 |
BOJ 10798번: 세로읽기 (0) | 2023.05.21 |
BOJ 2566번: 최댓값 (0) | 2023.05.20 |