728x90
반응형
문제 바로가기
문제:
민식이는 수학학원에서 단어 수학 문제를 푸는 숙제를 받았다. 단어 수학 문제는 N개의 단어로 이루어져 있으며, 각 단어는 알파벳 대문자로만 이루어져 있다. 이때, 각 알파벳 대문자를 0부터 9까지의 숫자 중 하나로 바꿔서 N개의 수를 합하는 문제이다. 같은 알파벳은 같은 숫자로 바꿔야 하며, 두 개 이상의 알파벳이 같은 숫자로 바뀌어지면 안 된다. 예를 들어, GCF + ACDEB를 계산한다고 할 때, A = 9, B = 4, C = 8, D = 6, E = 5, F = 3, G = 7로 결정한다면, 두 수의 합은 99437이 되어서 최대가 될 것이다. N개의 단어가 주어졌을 때, 그 수의 합을 최대로 만드는 프로그램을 작성하시오.
입력:
첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 10개이고, 수의 최대 길이는 8이다. 서로 다른 문자는 서로 다른 숫자를 나타낸다.
출력:
첫째 줄에 주어진 단어의 합의 최댓값을 출력한다.
import sys
from collections import defaultdict
sys.stdin = open('/Users/song/Desktop/Python/Python/h.txt', 'r')
n = int(input())
dic = defaultdict()
lst = [input() for _ in range(n)]
for i in lst:
cnt = len(i)
for j in i:
if j not in dic:
dic[j] = (10 ** (cnt - 1))
else:
dic[j] += (10 ** (cnt - 1))
cnt -= 1
x = sorted(dic.items(), key=lambda x: -x[1])
res = 0
mul = 9
for i in x:
res += i[1] * mul
mul -= 1
print(res)
그냥 길이가 긴 순서대로 둔 다음 했는데 갯수가 몇개씩 있는경우에 걸렸다.
각 길이마다 10 100 1000 단위로 정해놓고
각 문자열마다 총 얼마나 나왔는지 수치로 정하고 그 순서대로 숫자를 배분한다.
반응형
댓글