Stay Hungry Stay Foolish

BOJ 코딩테스트/Gold

BOJ 1339번 : 단어 수학 (Python/Gold 4)

dev스카이 2023. 7. 13. 20:57
 

1339번: 단어 수학

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

www.acmicpc.net


설명

예를 들어, GCF + ACDEB를 계산한다고 할 때, A = 9, B = 4, C = 8, D = 6, E = 5, F = 3, G = 7로 결정한다면, 두 수의 합은 99437이 되어서 최대가 될 것이다.

N개의 단어가 주어졌을 때, 그 수의 합을 최대로 만드는 프로그램을 작성하시오.

 

풀이

예를 들어 단어가 GCF와 ACDEB일 때, 

100*G + 10*C + F*1, 10000*A + 1000*C + 100*D + 10*E + B*1.

 

Solution

import sys
input = sys.stdin.readline

n = int(input()) #단어 개수
word = [] #단어를 입력받아서 담을 리스트

for _ in range(n): #단어 입력받기
    word.append(input().rstrip())

dict = {}
for i in range(n): 
    for j in range(len(word[i])):
        if word[i][j] in dict:
            dict[word[i][j]] += 10**(len(word[i])-j-1)
        else:
            dict[word[i][j]] = 10**(len(word[i])-j-1)

alpha = []
for i in dict.values(): #values() key의 value를 얻기 위함
    alpha.append(i)
alpha.sort(reverse=True) #내림차순 정렬, 디폴트값은 오름차순

sum = 0
max = 9
for i in alpha:
    sum += i*max
    max -= 1
print(sum)