ALGORITHM/BOJ
[백준] 1339 단어 수학
뚜비두빱
2021. 12. 26. 18:59
https://www.acmicpc.net/problem/1339
1339번: 단어 수학
첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대
www.acmicpc.net
ABC, BACDE가 있다면 B가 제일 높은숫자, 그다음 A, C 순으로 큰 자릿수에 있는 알파벳 순으로 높은 숫자를 매겨줘야 제일 큰 합을 얻어낼 수 있습니다. 이를 위해 1의자리에 있는 알파벳 (C, E) 에 1을 더해주고, 10의자리에 있는 알파벳(B, D)에는 10을 더해주고 마지막에 정렬을 해줘서 제일 숫자가 높은 알파벳에 우선순위를 정할 수 있도록 하였습니다.
# https://www.acmicpc.net/problem/1339
# 단어 수학.py
dic = dict()
answer_dic = dict()
board = []
for i in range(26):
dic[chr(ord('A')+i)] = 0
# 알파벳에 자릿수 더해주기
N = int(input())
for i in range(N):
x = input()[::-1]
board.append(x)
for j in range(len(x)):
dic[x[j]] += 1 * (10 ** j)
# 할당된 숫자를 기준으로 알파벳 정렬 후 9부터 1까지 숫자 할당
res = sorted(dic.items(), key=lambda x : x[1],reverse=True)
start_n = 9
for i in res:
if i[1] == 0:
break
answer_dic[i[0]] = start_n
start_n -= 1
# 계산 해주기
answer = 0
for s in board:
for i, v in enumerate(s):
answer += answer_dic[v] * (10 ** i)
print(answer)