알고리즘 공부

[BOJ] 단어수학(1339) 문제 풀이 | Python3

유나쒸 2021. 5. 9. 03:56


 2 GCF ACDEB 예제에서 각 알파벳에 대해 자릿수만큼 더한 후 더한 수를 정렬하고 순서대로 9 to 1 을 곱하여 더하면 최대값을 도출할 수 있다. 

ACDEB 는 A:10000 B:1 C:1000 D:100 E:10 이며 

GCF 결과를 누적하면 A:10000 B:1 C:1010 D:100 E:10 F:1 G:100 으로 계산할 수 있다.

더한 수를 내림차순으로 정렬하면 A:10000, C:1010, D:100, G:100, E:10, B:1, F:1이다.

정렬된 values(10000,1010,100,100,10,1,1)에 순서대로 9,8,...3 를 곱해서 더하면 최대값이 나온다.

 

 

1
2
3
4
5
6
7
8
9
import sys
 
n, *words = map(lambda x: x.rstrip(), sys.stdin.readlines())
alpha={}
  for word in words: 
    for i, w in enumerate(word[::-1]):
      if w in alpha.keys(): alpha[w]+=10**i
      else: alpha[w]=10**i
print(sum(v*for v,n in zip(sorted(alpha.values(), reverse=True), range(9,0-1))))
cs