본문 바로가기
코딩 테스트/Python_백준

[백준/Python] 2745번 진법 변환 문제

by 모두의 케빈 2023. 4. 5.

■ 2745번 진법 변환 문제

 

출처: 백준 2745번 진법 변환 문제

 

■ 코드 풀이

 

이 문제를 풀지 못하셨다면 대부분은 진법을 어떻게 변환하는지 모르셨기 때문일 겁니다. 특정 진법의 수를 10진법으로 변환하는 방법은 의외로 단순합니다. 각 자리의 숫자에 진법의 거듭 제곱을 곱해주고 이를 모두 더해주면 됩니다. 몇 가지를 예시로 들어보겠습니다.

[예시1]   10111(2) = 1*2^4 + 0*2^3 + 1*2^2 + 1*2^1 + 1*2^0 = 23
[예시2 ]   ZZZZZ(36) = 35*36^4 + 35*36^3 35*36^2 + 35*36^1 + 35*36^0 = 60,466,175

 

이제는 코드로 들어가보겠습니다. 최대 36진법까지 가능한 모든 숫자를 표현하는 alphabet_list를 선언합니다. 그리고 각 자리의 숫자가 10진법으로 몇인지에 대한 정보를 담은 num_list를 선언합니다. 두 list는 index를 key값으로 join 할 수 있습니다.

그리고 for loop를 돌며 enumerate 함수를 활용하여 입력 받은 값을 index를 붙여 차례대로 불러옵니다. 그 다음은 index 메서드를 활용하여 진법수를 10진법으로 바꿔주면 되는데요. 주의할 점은 거듭 제곱을 할 때 0승이 아니라 자리수-1승을 해줘야 한다는 점입니다. 위의 예시를 보면 왼쪽부터 값을 불러오므로 2의 0승이 아니라 "2의 4승(2^4)"을 곱해줘야 한다는 의미입니다. 

N,B = input().split()
B = int(B)

alphabet_list = list('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ')
num_list = list(range(36))

sum = 0

for i, char in enumerate(N):
    num_idx = alphabet_list.index(char)
    sum += (num_list[num_idx] * (B**(len(N)-1-i)))
    
print(sum)

댓글