[백준] 1339번 단어수학 - 파이썬/그리디

JinUk Lee·2023년 1월 12일
0

백준 알고리즘

목록 보기
17/78

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


N = int(input())

W_list = []
A_list = []

for i in range(N):

    W = input()
    W_list.append(W)
    M = list(W)

    for j in M:
        A_list.append(j)

A_list = list(set(A_list))
A_dict = dict.fromkeys(A_list,0)

for i in W_list:
    K = len(i)

    for j in range(len(i)):
        A_dict[i[j]] += 10**(K-j-1)


A_dict = list(A_dict.items())


A_dict.sort(key = lambda x:(-x[1]))

ans = 0
max_num = 9

for i in A_dict:

    ans += i[1]*max_num

    max_num -= 1

print(ans)

알파벳을 추출하여 딕셔너리를 만들고 value로는 0을 넣어주었다.

그리고 단어를 순회하면서 자리수를 구하고 곱해주어 딕셔너리의 value에 더해주었다.

예를 들면 C는 'GCF' 에서 10, 'ACDEB'에서 1000이므로 1010이다.

이렇게 구한 딕셔너리를 다시 리스트로 변환하여 value에 따라 정렬해주고 가장 큰 값을 9부터 차례로 대입하여 더해준다

profile
개발자 지망생

0개의 댓글