ν‹°μŠ€ν† λ¦¬ λ·°

728x90
λ°˜μ‘ν˜•

문제

 

1339번: 단어 μˆ˜ν•™

첫째 쀄에 λ‹¨μ–΄μ˜ 개수 N(1 ≤ N ≤ 10)이 주어진닀. λ‘˜μ§Έ 쀄뢀터 N개의 쀄에 단어가 ν•œ 쀄에 ν•˜λ‚˜μ”© 주어진닀. λ‹¨μ–΄λŠ” μ•ŒνŒŒλ²³ λŒ€λ¬Έμžλ‘œλ§Œ μ΄λ£¨μ–΄μ Έμžˆλ‹€. λͺ¨λ“  단어에 ν¬ν•¨λ˜μ–΄ μžˆλŠ” μ•ŒνŒŒλ²³μ€ μ΅œλŒ€

www.acmicpc.net

 

문제 풀이

 κ° μ•ŒνŒŒλ²³μ΄ μ£Όμ–΄μ§ˆ λ•Œ, μ–΄λŠ μžλ¦¬μ— μœ„μΉ˜ν•˜λŠλƒμ— 따라 0μ—μ„œ 9의 숫자둜 λ³€ν™˜ν•˜μ—¬ 합을 κ³„μ‚°ν•˜μ—¬μ•Ό ν•œλ‹€. 문제λ₯Ό ν’€κΈ° μœ„ν•΄μ„œ μžλ¦Ώμˆ˜κ°€ κ°€μž₯ 큰 μ•ŒνŒŒλ²³λΆ€ν„° 9λΆ€ν„° 0κΉŒμ§€ 숫자λ₯Ό λ³€ν™˜ν•˜λ©΄ λœλ‹€. 예λ₯Ό λ“€μ–΄ 예제 μž…λ ₯ 2의 경우 `{'A': 10000, 'C': 1010, 'G': 100, 'D': 100, 'E': 10, 'F': 1, 'B': 1}`와 같이 A, C, G, D, E, F, B 순으둜 9μ—μ„œ 3κΉŒμ§€μ˜ 숫자둜 λ³€ν™˜ν•œλ‹€. 그러면, GCF + ACDEBλŠ” 784 + 98653λΌλŠ” 것을 μ•Œ 수 μžˆλ‹€.

 

 λ¬Έμ œλ₯Ό ν’€κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒκ³Ό 같은 λ‘œμ§μ„ λ”°λ₯΄λ©΄ μ‰½κ²Œ ν•΄κ²°ν•  수 μžˆλ‹€.

  • defaultdictλ₯Ό ν™œμš©ν•˜μ—¬ 각 μ•ŒνŒŒλ²³μ˜ 자릿수λ₯Ό κ³„μ‚°ν•œλ‹€.
  • μžλ¦Ώμˆ˜κ°€ κ°€μž₯ 큰 μ•ŒνŒŒλ²³λΆ€ν„° μ •λ ¬ν•˜μ—¬, 9λΆ€ν„° 숫자λ₯Ό ν• λ‹Ήν•˜μ—¬ κ³„μ‚°ν•œλ‹€.

 

μ½”λ“œ

from sys import stdin
from collections import defaultdict


if __name__ == '__main__':
    answer = 0
    n = int(stdin.readline())
    alphabet = defaultdict(int)
    change = [num for num in range(10)][::-1]

    for _ in range(n):
        word = stdin.readline().strip()
        length = len(word)
        for idx, w in enumerate(word):
            alphabet[w] += 10 ** (length - idx - 1)

    alphabet = dict(sorted(alphabet.items(), key=lambda x: x[1], reverse=True))
    print(alphabet)
    for c, cnt in zip(change, alphabet.values()):
        answer += c * cnt

    print(answer)
728x90
λ°˜μ‘ν˜•
λŒ“κΈ€
κΈ€ 보관함
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€