문제링크
문제 요약
1. 알파벳 대문자로 구성된 n개의 단어가 주어진다
2. 알파벳을 숫자로 변경하여 단어를 모두 합할 때 가장 큰 값을 구하라
어떻게 풀어야 할까?
1. 숫자로 변경 시 자릿수가 가장 큰 알파벳에 9를 대입해야 하며 이후 차례대로 큰 수를 대입해야 한다.
-> 자릿수는 단어의 길이로 파악하면 될 것이다.
코드
n = int(input())
words = [input() for _ in range(n)]
# 알파벳별 점수를 저장할 딕셔너리
alpha_score = {}
# 점수 자릿수 부여
for word in words:
digits = 10 ** (len(word)-1)
for c in word:
if c in alpha_score:
alpha_score[c] += digits
else:
alpha_score[c] = digits
digits //= 10
# value 기준 내림차순 정렬
alpha_score = sorted(alpha_score.items(), key = lambda x:x[1], reverse=True)
num = 9
result = 0
# 가장 큰 점수부터 num을 곱해 결과값에 더해줌
for v in alpha_score:
result += v[1] * num
num -= 1
print(result)
코드 풀이
각 단어마다 알파벳, 자릿수(100,1000 ...)가 다르기 때문에 딕셔너리를 사용해서
key = 알파벳, value = 자릿수를 저장해서 가장 자릿수 점수가 높은 알파벳을 찾는 식으로 해결하였다.
피드백
1. dictionary(이후 dic)를 sorted 할 때 iterable 값으로 dic.items()이 오며 타입 은 list로
, 요소는 tuple 타입으로 묶어서 반환된다.
2. tuple은 immutable하기 때문에 유의해야 한다.