1339 단어 수학

정민용·2023년 5월 1일

백준

목록 보기
164/286

문제

민식이는 수학학원에서 단어 수학 문제를 푸는 숙제를 받았다.

단어 수학 문제는 N개의 단어로 이루어져 있으며, 각 단어는 알파벳 대문자로만 이루어져 있다. 이때, 각 알파벳 대문자를 0부터 9까지의 숫자 중 하나로 바꿔서 N개의 수를 합하는 문제이다. 같은 알파벳은 같은 숫자로 바꿔야 하며, 두 개 이상의 알파벳이 같은 숫자로 바뀌어지면 안 된다.

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

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

# 1339
import sys
input = lambda: sys.stdin.readline().strip()

n = int(input())
word = [input() for _ in range(n)]

number = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
alphabet = [0] * 26

for w in word:
    w_len = len(w)
    for i in range(w_len):
        alphabet[ord(w[w_len - (i+1)]) - ord("A")] += (10 ** i)
            
alphabet.sort(reverse = True)

cnt = 0
for alpha in alphabet:
    if alpha > 0:
        cnt += 1
    else:
        break

total = 0
for i in range(cnt):
    total += alphabet[i] * number[i]
    
print(total)

백준 1339 단어 수학

0개의 댓글