-
[6일차](문제 번호 : 2745, 진법 변환) 도전백준 문제 풀이 2023. 7. 23. 22:46
1. 문제 요약
첫째 줄에 B진법수 N이 주어진다.
이 N을 10진법으로 바꿔 출력하면 된다.
N은 0~Z 까지로 이루어져있다. (A = 10, B = 11, ... , Z = 35)
예시.
입력
ZZZZZ 36
출력
60466175
2. 풀어보기
N의 각 자리 문자가 숫자라면 int 변환을 통해 계산하면 될 것이고, 알파벳이라면 ord()를 통해 숫자로 변환
하여 계산하면 될 것 같았다.
1. N, B 입력받고, 각 자리를 10진법으로 변환하여 합해서 넣을 변수 만들기
2. B 정수로 만들고, N에서 한 자리씩 가져와 위의 논리에 따른 변환 과정 거치기
3. 코드
1. N, B 입력받고, 각 자리를 10진법으로 변환하여 합해서 넣을 변수 만들기
N, B = input().split() base10 = 0
2. B 정수로 만들고, N에서 한 자리씩 가져와 위의 논리에 따른 변환 과정 거치기
count = 0 B = int(B) for i in N: if i.isdigit(): base10 += int(i)*B**(len(N) - count -1) else: base10 += (ord(i)-55)*B**(len(N) - count -1) count += 1 print(base10)
count 변수를 통해 자릿수를 세어나갔다.
또한 ord('A') = 65, ord('Z') = 90임을 통해 -55을 빼주었다.
4. 개선방안
int 함수는 정수 변환뿐만이 아니라 int(value, base) 를 통해 문자열을 ?진법으로 변환할 수 있었다.
즉, int('ZZZZZ', 36)은 ZZZZZ를 36진법으로써 계산한 수를 정수로 반환한다.
5. 얻어가는 것
int 함수의 진수 변환 방법에 대해 알았다.
'백준 문제 풀이' 카테고리의 다른 글
[8일차](문제 번호 : 11005, 진법 변환 2) 도전 -2 (0) 2023.07.27 [7일차](문제 번호 : 11005, 진법 변환 2) 도전 -1 (0) 2023.07.24 [5일차](문제 번호 : 2536, 색종이) 도전 (0) 2023.07.22 [4일차](문제 번호 : 2566, 최댓값) 도전 (0) 2023.07.21 [3일차](문제 번호 : 10798, 세로읽기) 도전 (0) 2023.07.20