Algorithm (PS)
[백준] 1399 단어 수학 in Python 파이썬 풀이
minjiwoo
2022. 1. 4. 17:47
728x90
https://www.acmicpc.net/problem/1339
1339번: 단어 수학
첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대
www.acmicpc.net
문제!
이 문제는 그리디 유형이다
알파벳 중에서 가중치가 높은 순서대로 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