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