boj/백준-1339-python

cosmos·2022년 1월 20일
0
post-thumbnail

문제


풀이

  • 민식이는 수학학원에서 단어 수학 문제를 푸는 숙제를 받았다
  • 단어 수학 문제는 n개의 단어로 이루어져 있으며, 각 단어는 알파벳 대문자로만 이루어져 있다.
  • 이 때, 각 알파벳 대문자를 0부터 9까지의 숫자 중 하나로 바꿔서 n개의 수를 합하는 문제이다.
  • 같은 알파벳은 같은 숫자로 바꿔야 하며, 두 개 이상의 알파벳이 같은 숫자로 바뀌어지면 안 된다.
  • 첫째 줄에 단어의 개수 N이 주어진다.
  • 둘째 줄부터 n개의 줄에 단어가 한 줄에 하나씩 주어진다.
  • 단어는 알파벳 대문자로만 이루어져있다.
  • 모든 단어에 포함되어 있는 알파벳은 최대 10개이고, 수의 최대 길이는 8이다.
  • 서로 다른 문자는 서로 다은 숫자를 나타낸다.
  • 첫째 줄에 주어진 단어의 합의 최댓값을 출력한다.
    -> 풀지 못했다
    -> 인터넷을 뒤져보니 각 자릿수를 기록하면서 접근해야하는 문제였다.
    -> 후에 다시 접근해볼 것.

코드

import sys
# greedy -> 각 알파벳의 중요도를 기록하자
# 어차피 모든 알파벳의 합을 구하는 것이므로 각 알파벳이 존재하는 자릿수를 기록해놓는다면 최대를 구할 수 있음
def input():
    return sys.stdin.readline().rstrip()

N = int(input())
word = [input() for _ in range(N)]
alpha_dict = {}  # 알파벳별 자릿수에 몇 번 나타났는지를 기록할 딕셔너리

for w in word:
    for i, alpha in enumerate(w):
        if alpha in alpha_dict:
            alpha_dict[alpha] += pow(10, len(w) - i - 1)
        else:
            alpha_dict[alpha] = pow(10, len(w) - i - 1)

sorted_dict = list(alpha_dict.values())
sorted_dict.sort()
sorted_dict = list(reversed(sorted_dict))

sum = 0
number = 9
for sd in sorted_dict:
    sum += number * sd
    number -= 1
print(sum)

결과

출처

boj
github

0개의 댓글