https://www.acmicpc.net/problem/1339
S[::-1]
: 슬라이싱을 이용하여 문자열을 거꾸로 순회하면서 10을 곱해준 자리수를 누적ord(s)
: "A" = 65, "B" = 66 ...이므로 65에서 ord(s)를 뺀 값을 인덱스로 이용import sys
import heapq
input = sys.stdin.readline
n = int(input())
strings = []
for _ in range(n):
strings.append(input().rstrip())
alpha = [0 for _ in range(26)]
for S in strings:
unit = 1
# 낮은자리수 문자부터 순회
for s in S[::-1]:
alpha[65-ord(s)]+=unit
unit*=10
q = []
# 최대힙으로 사용
for a in alpha:
if a!=0:
heapq.heappush(q, -a)
answer = 0; i = 9
# 큰 수부터 꺼내어 할당한 수를 곱한 뒤 정답에 더함
while q:
a = heapq.heappop(q)
answer += -a*i
i-=1
print(answer)
재밌는 문제였다.