import sys
input = sys.stdin.readline
from collections import deque
n36 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def caldiff(num):
L = len(num)
for i in range(L):
n = int(num[L-i-1],36)
diff[n] += (35-n)*(36**i)
def make36(x):
if x == 0:
return 0
dq = deque()
while x:
dq.appendleft(n36[x%36])
x //= 36
return "".join(dq)
N = int(input())
SUM = 0
diff = [0]*36
for i in range(N):
num = input().strip()
SUM += int(num,36)
caldiff(num)
diff.sort(reverse=True)
K = int(input())
for i in range(K):
SUM += diff[i]
print(make36(SUM))
다른 언어는 어떤식으로 작동하는지 모르겠지만 파이썬은 36진수 >> int로의 변환을 지원해서 한결 쉽게 푼 것 같다.
알고리즘을 요약하면,
1. 입력값이 주어지면 입력값과, 입력값을 정수형으로 전환한 후 총합을 저장한다.
2. 입력값에 대해서 각 자릿수마다 (Z(=35)와의 차이) * (36^차수) 를 diff 리스트에 저장한다.
3. diff 리스트를 내림차순으로 정렬, K번만큼 diff값을 총합에 더한다.
4. 총합을 36진수로 변환하고 출력한다.
참고로 36진수 >> 정수의 변환은 지원하지만 정수 >> 36진수의 변환은 파이썬에서 지원하지 않아 코드로 직접 짜야한다. 이때 주의할 점이 숫자가 0인 경우 0을 출력해야하는데 아무것도 출력하지 않으면 안된다. (이거때문에 한번 틀렸다)
오늘의 교훈) 파이썬 짱