https://www.acmicpc.net/problem/1339
1339번: 단어 수학첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대www.acmicpc.net
그리디는 아이디어가 중요한 거 같다.
맨처음에는 string.uppercase()를 이용해 dcit를만들었는데 그럴필요조차 없었다.
dictionary에 알파벳마다의 중요도를 넣는다.
각 단어에서 알파벳의자릿수**10을 더해준다.
그리고 중요도가 높은 순서대로 9부터 곱하면서 더해준다.
import stringn=int(input())str_dict={}for _ in range(n): tmp=input()
len_tmp=len(tmp) for i in range(len_tmp):
if tmp[i] in str_dict: str_dict[tmp[i]]+=10**(len_tmp-i-1)
else: str_dict[tmp[i]]=10**(len_tmp-i-1)
tmp_list=sorted(str_dict.values(),reverse=True)answer=0
for i in range(len(tmp_list)-1,-1,-1): answer+=tmp_list[i]*(9-i)print(answer)여기서 한가지 알게 된 사실이있다.
collections의 defaultdict를 이용하면, key가 없어도 에러가나는대신 default값(int는 0이다) 을 반환해준다.
이를 이용하면, 굳이 귀찮게 key를 만들필요가 없다.
from collections import defaultdictn=int(input())str_dict=defaultdict(int)
for _ in range(n): tmp=input() len_tmp=len(tmp)
for i in range(len_tmp): str_dict[tmp[i]]+=10**(len_tmp-i-1)
tmp_list=sorted(str_dict.values(),reverse=True)answer=0
for i in range(len(tmp_list)-1,-1,-1): answer+=tmp_list[i]*(9-i)print(answer)