
https://www.acmicpc.net/problem/1339
n=int(input())
alpha=[]
dic={}
nums=[]
for i in range(n):
alpha.append(input())
for i in range(n):
for j in range(len(alpha[i])):
if alpha[i][j] in dic:
dic[alpha[i][j]]+=10**(len(alpha[i])-j-1)
else:
dic[alpha[i][j]]=10**(len(alpha[i])-j-1)
for value in dic.values():
nums.append(value)
nums.sort(reverse=True)
answer=0
count=9
for i in nums:
answer+=count*i
count-=1
print(answer)
그리디문제이다. 높은 자리수를 가진 알파벳 순으로 9에서부터0까지 부여하여 계산하는 문제이다.
알파벳 사전을 만들기 위해 dictionary를 사용해서 만든다. 문자열들을 하나씩 탐색한다.
탐색하면서 자리수 만큼 더해주고 기존에 이미 넣어놓았다면 추가해서 다시 넣어 놓는다.
그후 사전의 value만 뽑아내서 역순으로 정렬 후 큰값부터 9를 부여하며 더해준다.
이는 999+88 => 900+90+9+80+8로 계산하는 것처럼 쪼갠다음에 알파벳끼리 모아서 더해주는 느낌이다.
예시 2번 {A:10000,B:1,c:1010,d:100,e:1,f:1,g:100} 이와 같다.