BOJ - 1339

주의·2023년 11월 9일
0

boj

목록 보기
2/214
post-thumbnail

백준 문제 링크
단어 수학

❓ 접근법

  1. ABCDE의 경우 A에 가장 큰 수를 매칭하는 것이 좋으므로, 각 알파벳의 자리수를 결정해준다. (A = 10^4, B = 10^3, ... E = 10^0)
  2. 알파벳이 딕셔너리에 없으면 1번처럼 하고, 있으면 딕셔너리의 값에 더해준다.
  3. 자리수의 값들을 내림차순으로 정렬하고, 0~9 까지의 숫자를 각 인덱스에 맞는 값과 곱해준다. (여기서 0~9 숫자를 내림차순으로 곱해야 가장 큰 값을 구할 수 있다)

👌🏻 코드

n = int(input())
s = 0
num_list = [i for i in range(9,-1,-1)]
# 0~9를 내림차순으로 정렬


alpha_list = [] # 단어를 넣을 리스트
alpha_dic = {} # 알파벳에 해당하는 자리수 값을 넣을 딕셔너리

for i in range(n):
    x = input()
    alpha_list.append(x)
    
for i in range(len(alpha_list)):
    for j in range(len(alpha_list[i])):
        if alpha_list[i][j] not in alpha_dic:
            
            alpha_dic[alpha_list[i][j]] = 10 ** (len(alpha_list[i])-j-1)
        else:
            alpha_dic[alpha_list[i][j]] += 10 ** (len(alpha_list[i])-j-1)
            
 # 앞에 나오는 알파벳부터 10의 n제곱, 10의 n-1제곱.. 순으로 곱해준다
            
sorted_alpha = sorted(alpha_dic.values(), reverse = True)

for i in range(len(sorted_alpha)):
    s += sorted_alpha[i] * num_list[i]
    
print(s)

0개의 댓글