728x90
https://www.acmicpc.net/problem/1339
문제!
이 문제는 그리디 유형이다
알파벳 중에서 가중치가 높은 순서대로 9 8 7 ~ 0 숫자를 부여해주어야 하기 때문이다.
가중치는 자리수 !!! 라고 생각하면 된다 그러면 쉽게 풀린다
예를들어 입력으로
GCF
ACDEB
가 입력되었으면 A는 만의 자리이므로 10000 라는 가중치를 가지게 되고
C의경우는 첫번째 단어에서는 10 , 두번째 단어에서는 1000 이므로 총 1010 라는 가중치를 가지게 된다
그리고 가중치 순으로 내림차순으로 나열 후 숫자를 하나씩 부여해주고
총합을 구한다 !
import sys
n = int(sys.stdin.readline())
alpha = [] # 단어 저장
alpha_dict = {} # 알파벳 수 저장
num = []
for i in range(n):
alpha.append(sys.stdin.readline().rstrip())
for i in range(n):
for j in range(len(alpha[i])): # 단어의 길이만큼 실행
if alpha[i][j] in alpha_dict: # 이미 있으면
alpha_dict[alpha[i][j]] += 10 **(len(alpha[i])-j-1)
else:
alpha_dict[alpha[i][j]] = 10 ** (len(alpha[i])-j-1)
# value 만 추가한다
for val in alpha_dict.values():
num.append(val)
num.sort(reverse=True) # 내림차순 정렬하기
pows = 9
sum = 0
for i in num:
sum += pows * i
pows -= 1
print(sum)
728x90
'Algorithm (PS)' 카테고리의 다른 글
[백준] 1476 in Python 파이썬 풀이 (0) | 2022.01.05 |
---|---|
백준 14503 in Python 파이썬 풀이 (0) | 2022.01.05 |
[백준] 1026번 in Python 파이썬 풀이 (0) | 2022.01.04 |
union-find 알고리즘을 알아보자! in Python (0) | 2021.11.26 |
union-find 알고리즘을 알아보자! in Pytho (0) | 2021.11.23 |