Skip to main content

백준 1339 단어 수학

·125 words·1 min· loading

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)