본문 바로가기
백준알고리즘/문자열

(Python/🥇5)백준알고리즘 1339번 : 단어

by windy7271 2024. 10. 5.
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 단위로 정해놓고

 

각 문자열마다 총 얼마나 나왔는지 수치로 정하고 그 순서대로 숫자를 배분한다.

 

반응형

댓글