[백준][파이썬] 1339번. 단어 수학

문제

https://www.acmicpc.net/problem/1339

 

풀이

ABC + CE

= (A*100 + B*10 + C) + (C*10 + D)

= A*100 + B*10 + C*11 + D

 

이렇게 나타낼 수 있다는 점에 집중해서 문제를 풀었다.

각 문자가 위치한 자리수들을 저장해놓은 후, 자리수 기준으로 정렬을 하고 큰 자리수를 가지는 문자에 큰 수를 할당하는 방식으로 풀었다.

 

위의 예에서는 [A:100, C:11, B:10, D] 순으로 큰 자리수를 가지고 있으므로, A=9, C=8, B=7, D=6을 할당하면 그 합을 가장 크게 만들 수 있게 된다.

N = int(input())
words = []
for _ in range(N) :
  words.append(input())

word_dic = {}

for word in words :
  n = len(word)
  for idx, alpha in enumerate(word) :
    if alpha in word_dic :
      word_dic[alpha] += 10**(n-idx-1)
    else :
      word_dic[alpha] = 10**(n-idx-1)
    
word_num = sorted(word_dic.values(), reverse = True)
answer = 0
num = 9
for i in range(len(word_num)) :
  answer += word_num[i] * num
  num -= 1
print(answer)
728x90