본문 바로가기

boj

백준 1339 단어 수학

https://www.acmicpc.net/problem/1339

 

1339번: 단어 수학

첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대

www.acmicpc.net

그리디는 아이디어가 중요한 거 같다.

맨처음에는 string.uppercase()를 이용해 dcit를만들었는데 그럴필요조차 없었다.

 

dictionary에 알파벳마다의 중요도를 넣는다.

각 단어에서 알파벳의자릿수**10을 더해준다.

 

그리고 중요도가 높은 순서대로 9부터 곱하면서 더해준다.

import string
n=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 defaultdict
n=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)

'boj' 카테고리의 다른 글

백준 16928 뱀과 사다리 게임  (0) 2022.05.16
백준 1987 알파벳  (0) 2022.05.15
백준 15686치킨배달  (0) 2022.05.13
백준 14502 연구소  (0) 2022.05.12
백준 5014 스타트링크  (0) 2022.05.12