GCF + ACDEB
와 같이 영어단어가 주어지면 덧셈을 한다.
덧셈의 결과가 최대값이 되도록 각 알파벳마다 0 ~ 9를 매칭해라.
단, 각 알파벳은 전부 다른 값을 가진다.
GCF + ACDEB
의 경우 A = 9, B = 4, C = 8, D = 6, E = 5, F = 3, G = 7
일 때 최대값을 가진다.
ex)
2
GCF
ACDEB
알파벳이 주어졌을 때 가중치를 두면 쉽게 접근할 수 있다.
GCF + ACDEB
의 경우 가중치를 다음과 같이 주는 것이다.
A = 10000
C = 1000 + 10 = 1010
D = 100
G = 100
E = 10
B = 1
이 상태에서 높은 가중치를 가진 알파벳 부터 높은 수를 배정해주면 된다.
더 자세한건 코드를 통해 살펴보자.
import sys
input = sys.stdin.readline
# a ~ z가 가지는 가중치 리스트
alphabetList = [0 for _ in range(26)]
answer = 0
for _ in range(int(input())):
word = input().rstrip()
wordLength = len(word)
for i in range(wordLength):
# 알파벳별로 가중치 누적
alphabetList[ord(word[i]) - 65] += 10 ** (wordLength - i - 1)
# 높은 가중치를 가진 알파벳 순으로 9부터 배정해줌
for idx, weight in enumerate(sorted(alphabetList, reverse = True)):
# 오름차순 했으니 가중치 0부터는 생략
if weight == 0:
break
# 9를 가져가게 되면 다음 알파벳은 8을 가져가게 됨
answer += weight * (9 - idx)
print(answer)