Point πŸ’‘


λ”°λΌμ„œ κ°€μž₯ μ€‘μš”ν•œ ν¬μΈνŠΈλŠ” 각 μ•ŒνŒŒλ²³μ΄ λ‚˜νƒ€λ‚œ λͺ¨λ“  자릿수λ₯Ό κ³„μ‚°ν•΄μ„œ κ·Έ 값을 ν† λŒ€λ‘œ 숫자λ₯Ό λΆ€μ—¬ν•˜λŠ” 것이닀. μ΄λ•Œ, λ”•μ…”λ„ˆλ¦¬λ₯Ό μ΄μš©ν•˜μž.

자릿수 계산은 10의 제곱수λ₯Ό 이용 ex) ABCDE β†’ A : 10^4

이미 λ”•μ…”λ„ˆλ¦¬μ— μžˆλŠ” 숫자면 자릿수λ₯Ό λ”ν•΄μ„œ κ³„μ‚°ν•œλ‹€.

My Solution



import sys
n = int(sys.stdin.readline())
words = []
for _ in range(n):
    words.append(list(sys.stdin.readline().rstrip()))

# κ°€μž₯ μžλ¦Ώμˆ˜κ°€ 높이 μžˆλŠ” μ•ŒνŒŒλ²³λΆ€ν„° μ°¨λ‘€λŒ€λ‘œ 9λΆ€ν„° 숫자λ₯Ό λΆ€μ—¬ν•˜λŠ” 것을 생각
# -> μ˜ˆμ™Έ λ°œμƒ
# 각 μ•ŒνŒŒλ²³μ΄ λ‚˜νƒ€λ‚œ λͺ¨λ“  자릿수λ₯Ό κ³„μ‚°ν•΄μ„œ κ·Έ 값을 ν† λŒ€λ‘œ 숫자λ₯Ό λΆ€μ—¬

# 자릿수λ₯Ό κ³„μ‚°ν•΄μ„œ λ”•μ…”λ„ˆλ¦¬μ— λ„£κΈ° {'A' : 10000}
alpha_value = {}
for word in words:
    for i in range(len(word)):
        if word[i] not in alpha_value:
            alpha_value[word[i]] = 10 ** (len(word) - 1 - i) # 자릿수 ν‘œν˜„

        else:
            alpha_value[word[i]] += 10 ** (len(word) -1 - i)

# μžλ¦Ώμˆ˜κ°€ 높은 μˆœμ„œλŒ€λ‘œ μ•ŒνŒŒλ²³ μ •λ ¬ν•˜κΈ°
alpha_value = sorted(alpha_value.items(), key=lambda x: x[1], reverse=True)
alpha_to_num = {}

# μ •λ ¬ν•œ μ•ŒνŒŒλ²³ λ¦¬μŠ€νŠΈμ—μ„œ μˆœμ„œλŒ€λ‘œ μ•ŒνŒŒλ²³μ„ κΊΌλ‚΄ 숫자 μ§€μ •ν•˜κΈ° {'A' : 9}
num = 9
for alpha in alpha_value:
    alpha_to_num[alpha[0]] = num
    num -= 1

# λ‹¨μ–΄μ˜ ν•© κ΅¬ν•˜κΈ°
ans = 0
for word in words:
    num = ""
    for i in range(len(word)):
        num += str(alpha_to_num[word[i]])

    ans += int(num)

print(ans)