📍문제 링크
https://www.acmicpc.net/problem/1339
1339번: 단어 수학
첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대
www.acmicpc.net
📍알고리즘 분류
- 그리디
📍문제 풀이
대문자로 구성된 문자열 리스트가 주어질 때, 문자열의 각 알파벳에 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)