본문 바로가기
Algorithm/Baekjoon

1339. 단어 수학 (Python)

by 원만사 2022. 3. 4.
반응형
 

1339번: 단어 수학

첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대

www.acmicpc.net

 

풀이

 각 알파벳의 자릿수를 더하여 높은 숫자를 가진 알파벳 순으로 큰 숫자로 바꾸면 된다. 

 

 위의 예제에서 첫 번째 단어인 GCF를 보면 G는 100의 자리, C는 10의 자리, F는 1의 자리에 있다. 두 번째 단어인 ACDEB를 보면 A는 10000의 자리, C는 1000의 자리, D는 100의 자리, E는 10의 자리, B는 1의 자리에 있다. 딕셔너리를 사용하여 이를 나타내면 

{'A': 10000, 'C': 1010, 'D': 100, 'G': 100, 'E': 10, 'B': 1, 'F': 1}이 된다. 이제 각 알파벳을 숫자로 바꾸면 값이 큰 순서대로 

A = 9, C = 8, D = 7, G = 6, E = 5, B = 4, F = 3이 된다.

 결국 식은 683 + 98754가 되고 이를 계산하면 99437이 나오는 것을 알 수 있다.

 

코드

from collections import defaultdict

if __name__ == '__main__':
    N = int(input())  # 단어의 개수
    words = []  # 단어들
    alphabets = defaultdict(int)  # 각 알파벳의 자릿수를 합한 결과를 모아 놓는 딕셔너리
    alphaNum = [0 for _ in range(26)]  # 각 알파벳에 사용될 숫자를 저장해 놓는 리스트

    for _ in range(N):
        word = input()
        tmp = 10 ** (len(word) - 1)  # 현재 알파벳의 자릿수

        for w in word:
            alphabets[w] += tmp  # 딕셔너리에 현재 알파벳의 자릿수를 더한다
            tmp //= 10

        words.append(word)

    sortedAlphabets = sorted(
        alphabets.items(), key=lambda x: x[1], reverse=True)  # 딕셔너리를 값에 따라 내림차순 정렬

    num = 9  # 알파벳에 배정될 숫자
    for (alpha, _) in sortedAlphabets:
        alphaNum[ord(alpha) - 65] = num  # 현재 알파벳에 num 배정
        num -= 1

    res = 0
    for word in words:
        tmp = 0
        for c in word:
            tmp = tmp * 10 + alphaNum[ord(c) - 65]
        res += tmp

    print(res)
반응형

'Algorithm > Baekjoon' 카테고리의 다른 글

11000. 강의실 배정 (Python)  (0) 2022.03.07
2437. 저울 (Python)  (0) 2022.03.06
1022. 소용돌이 예쁘게 출력하기 (Python)  (0) 2022.03.01
1202. 보석 도둑 (Python)  (0) 2022.02.28
1647. 도시 분할 계획 (Python)  (0) 2022.02.28

댓글