반응형
풀이
각 알파벳의 자릿수를 더하여 높은 숫자를 가진 알파벳 순으로 큰 숫자로 바꾸면 된다.
위의 예제에서 첫 번째 단어인 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 |
댓글