설명
예를 들어, 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)
'BOJ 코딩테스트 > Gold' 카테고리의 다른 글
BOJ 1715번 : 카드 정렬하기 (Python/Gold 4) (0) | 2023.09.04 |
---|---|
BOJ 10026번 : 적록 색약 (Python/Gold 5) (1) | 2023.05.14 |