■ 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)
'코딩 테스트 > Python_백준' 카테고리의 다른 글
[백준/Python] 2720번 세탁소 사장 동혁 문제 (0) | 2023.04.07 |
---|---|
[백준/Python] 11005번 진법 변환2 문제 (0) | 2023.04.06 |
[백준/Python] 2563번 색종이 문제 (0) | 2023.04.04 |
[백준/Python] 10798번 세로읽기 (0) | 2023.04.03 |
[백준/Python] 2566번 최댓값 문제 (0) | 2023.04.02 |
댓글