코딩문제풀이/Baekjoon

[Python_Greedy] 백준 1339번 : 단어 수학

코딩하는 포메라니안 2021. 11. 8. 16:41

1. 문제

https://www.acmicpc.net/problem/1339

 

1339번: 단어 수학

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

www.acmicpc.net

 

 

 

2. 풀이 과정

1. 주어진 문자열이 "AFCA"이라면 A = 1000+1, F = 100, C = 10으로 자릿수만큼 수를 더해준다. 다음 문자열을 읽을 때는 이 값에 누적으로 더해주면 된다.

 

2. 누적으로 더한 수들을 정렬해서, 제일 큰 수를 가진 알파벳부터 9 => 8 => 7 ... 순으로 할당하는 것이 제일 큰 수를 만들 수 있다.

따라서 출력값은 (해당 알파벳이 가진 수)*(할당된 수)들을 모두 합하면 된다.

ex) AFCA = 1001 * 9 + 100 * 8 + 10 * 7 = 9879

word_dict = {}

for _ in range(int(input())):
  for i, w in enumerate(reversed(input())):
    word_dict[w] = word_dict.get(w, 0) + 10**i

#a = 정렬한 수
#b = 9 => 8 => 7 ...
print(sum(a * b for a, b in zip(sorted(word_dict.values(), reverse = True), range(9, -1, -1))))