728x90
N = int(input())
words = dict()
for _ in range(N):
word = input()
len_word=len(word) # 가중치를 자리수로 두기 위한 값
for char in word: # ex) 'ABC' = 'A'=100, 'B'= 10 'C' =1
if not char in words:
words[char] = 0
words[char] += 10**(len_word - 1)
len_word -= 1
words=sorted(words.items(),key=lambda x: x[1], reverse=True) # 가중치를 값으로 정렬, 내림차순
result = 0
for i in range(len(words)): # 가중치가 가장 큰 값부터 차례대로 곱해서 더함
result += words[i][1]*(9-i)
print(result)
#28776 KB 64 ms 385 B
더해서 가장 큰 값이 되어야하기때문에 자리수마다 가중치를 두어야한다고 생각이 들었다.
ABBBCC 의 값이 들어왔을때 개수는 B>C>A 순이지만 더한 값이 크려면 A(9)>B(8)>C(7)의 값이 되어야한다.
모든 문자열에 대해 이를 판단해야하므로 중첩문을 돌려서 딕셔너리에 저장했다.
sorted 함수를 사용해본적은 많지만 key값으로 lambda를 제대로 사용해본건 어제였는데 오늘도 잘되는거보니 앞으로도 잘쓸수 있을거 같다.
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 1075 나누기 (0) | 2021.01.30 |
---|---|
[백준] 2798 블랙잭 (0) | 2021.01.30 |
[백준] 4673 셀프 넘버 (0) | 2021.01.30 |
[백준] 1110 더하기 사이클 (0) | 2021.01.30 |
[백준] 1065 한수 (0) | 2021.01.30 |