😊 白駿1339:単語数学


1339:単語数学
これはGreedy題です.
今回はちょっと難易度があります問題を解いてみると、Gold 4題です.
📌 Try 1
N = int(input())
words = dict()

for _ in range(N):
  word = list(input())
  digit = 1

  for w in reversed(word):
    words[w] = digit if w not in words else words[w] + digit
    digit *= 10

num, _sum = 9, 0
for w in sorted(words.items(), reverse=True, key=lambda x:x[1]):
  _sum += num * w[1]
  num -= 1

print(_sum)
どうやって解決するか悩んで、いろいろな方法を考え出したが、一つも決められなかった.
ブログの文章の方向性を参考にして、コードはすべて私が書いたのです.dictで解き、dictに並べ替えました.dictunorderedの資料構造なので解けましたが、、、楽ではありません.
🎯 別の分のコード
n = int(input()) 
word = [list(map(lambda x: ord(x)-65, input().rstrip())) for _ in range(n)] 
alpha = [0] * 26

for i in range(n): 
  j = 0   
  for w in word[i][::-1]: 
    alpha[w] += (10 ** j) 
    j += 1 

alpha.sort(reverse=True) 
ans, t = 0, 9 
for i in range(26): 
  if alpha[i] == 0:
    break
  ans += (t * alpha[i]) 
  t -= 1

print(ans)
double-listで解けました.
🎁 Reference
  • [白準アルゴリズム]1339号:単語数学-Python
    https://suri78.tistory.com/183