📍문제 링크
https://www.acmicpc.net/problem/1339
📍알고리즘 분류
- 그리디
📍문제 풀이
대문자로 구성된 문자열 리스트가 주어질 때, 문자열의 각 알파벳에 0 ~ 9 까지의 수를 하나 할당해서 숫자로 변환하고, 이를 모두 더한 최댓값을 구하라
자릿수가 높고 > 많이 등장 하는 순서로 9, 8, 7 .. 을 배정하면 된다
딕셔너리를 만들고, 문자열을 하나씩 순회하면서 해당 알파벳에 자릿수를 더한다
- 예를 들어 ABC 문자열이 있으면, 딕셔너리는 { A: 100, B: 10, C: 1 } 이렇게 된다
- 여기에 숫자가 큰 순으로 9부터 넣어서 시그마를 구하면 된다
📍코드 (Python)
N = int(input())
data = [input() for i in range(N)]
dic = {}
for s in data:
order = len(s) - 1 # 인덱스를 역순으로
for i in s:
if i in dic:
dic[i] += 10 ** order
else:
dic[i] = 10 ** order
order -= 1
li = list(dic.items()) # 예 [ (A, 100), (B: 2), ... ]
li.sort(key=lambda x: x[1], reverse=True) # li의 원소는 튜플이다
# 튜플의 1번 인덱스를 기준으로 내림차순 정렬
# sort 는 원본을 변형
ans = 0
order_num = 9
for tup in li:
char, num = tup
ans += order_num * num
order_num -= 1
print(ans)