간단한 진법 변환 문제다. 사실 안 간단하다. 왜냐면 내가 좀 무식해서 진법 개념을 잘 몰랐기 때문이다. 사실 잘 모르기보다 뭔지 알긴 하는데 맨날 생각할 때마다 머리가 꼬여서 생각하기 싫어했다. 그래서 이 기회에 좀 확실히 공부했다.
자릿수에 따라 진법 계산만 하면 되기에 별다른 문제는 없었다 싶었다만..
N, B = input().split()
length = len(N)
total = 0
list_alpha = [chr(i) for i in range(65, 91)]
list_num = [i for i in range(10, 36)]
for i in range(length):
if N[i] in list_alpha:
total += list_num[list_alpha.index(N[i])] * (int(B)**(length-1))
length -= 1
else:
total += int(N)[i] * (int(B)**(length-1))
length -= 1
print(total)
자신있게 첫번째 코드를 써서 냈는데, 메모리 초과로 틀렸다!
아무래도 알파벳과 그에따른 숫자를 각 list에 저장하고 매번 반복문마다 길이가 긴 list에서 index를 찾는 방식이 메모리사용을 과하게 한 것 같다. 그래서 코드를 수정했다.
N, B = input().split()
length = len(N)
total = 0
text = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for i in range(length):
total += text.index(N[i]) * (int(B)**(length-1))
length -= 1
print(total)
알파벳은 우리가 실사용하는 숫자 10, 11, 12 ... 35를 나타낸 것이니 text라는 한 변수에 담아뒀다.
for i in range(length):
total += text.index(N[i]) * (int(B)**(length-1))
length -= 1
진법 변환 방식대로, 각 계수 x 자릿수^(진법수-1)를 전부 더해 total에 담았다.
진법 공부를 오랜만에 할 수 있어서 좋았다. 기초지식이 참 중요하다.. 무식한 내 자신을 반성한다. 그래도 잘 구현해냈으니 오케입니다. 다음.