[Python] 백준 1339번: 단어 수학

Jonie Kwon·2022년 4월 11일
0
post-custom-banner

https://www.acmicpc.net/problem/1339

풀이

  • 자리수가 큰 수를 높은 숫자로 할당해야 하기 때문에 각 알파벳이 등장한 자리수의 합을 누적하여 계산
  • S[::-1] : 슬라이싱을 이용하여 문자열을 거꾸로 순회하면서 10을 곱해준 자리수를 누적
  • ord(s) : "A" = 65, "B" = 66 ...이므로 65에서 ord(s)를 뺀 값을 인덱스로 이용
  • heapq에 누적된 자릿수 합을 음수로 넣어 최대힙 구현

코드

import sys
import heapq
input = sys.stdin.readline

n = int(input())
strings = []
for _ in range(n):
    strings.append(input().rstrip())

alpha = [0 for _ in range(26)]
for S in strings:
    unit = 1
    # 낮은자리수 문자부터 순회
    for s in S[::-1]:
        alpha[65-ord(s)]+=unit
        unit*=10

q = []
# 최대힙으로 사용
for a in alpha:
    if a!=0:
        heapq.heappush(q, -a)
answer = 0; i = 9

# 큰 수부터 꺼내어 할당한 수를 곱한 뒤 정답에 더함
while q:
    a = heapq.heappop(q)
    answer += -a*i
    i-=1
print(answer)

재밌는 문제였다.

profile
메모하는 습관
post-custom-banner

0개의 댓글