백준, 단어 수학, 1339
2024. 9. 12. 00:50ㆍETC/Algorithm
[유형]
그리디
[문제링크]
https://www.acmicpc.net/problem/1339
[요약]
예를 들어, GCF + ACDEB를 계산한다고 할 때, A = 9, B = 4, C = 8, D = 6, E = 5, F = 3, G = 7로 결정한다면, 두 수의 합은 99437이 되어서 최대가 될 것이다.
N개의 단어가 주어졌을 때, 그 수의 합을 최대로 만드는 프로그램을 작성하시오.
[문제풀이]
예를 들어, GCF + ACDEB를 계산한다고 할 때,
words[G] = 10^2, words[C] = 10^1 + 10^3, ... , words[B] = 10^0을 저장한다.
{'G': 100, 'C': 1010, 'F': 1, 'A': 10000, 'D': 100, 'E': 10, 'B': 1}
딕셔너리 words의 values()를 내림차순으로 정렬한다.
[10000, 1010, 100, 100, 10, 1, 1]
words_sort의 값에 9부터 차례로 곱한 뒤 더한다.
import sys
import heapq
def input():
return sys.stdin.readline().rstrip()
N = int(input())
alphabet = [input() for _ in range(N)]
words = {}
for alpha in alphabet:
x = len(alpha) -1
for a in alpha:
if a in words:
words[a] += 10**x
else:
words[a] = 10**x
x -=1
words_sort = sorted(words.values(), reverse=True)
result = 0
num =9
for ws in words_sort:
result += ws * num
num -= 1
print(result)
'ETC > Algorithm' 카테고리의 다른 글
백준, 바이러스, 2606, 파이썬 (0) | 2024.09.16 |
---|---|
백준, 저울, 2473, 파이썬 (1) | 2024.09.12 |
프로그래머스,단속카메라,42884,파이썬 (0) | 2024.09.11 |
백준, 강의실 배정, 11000, 파이썬 (0) | 2024.09.10 |
백준, 수리공 항승, 1449, 파이썬 (0) | 2024.09.10 |