STUDY/Algorithm

[백준] 1339 단어 수학

sinawi95 2021. 1. 30. 06:12
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