[BOJ 1339] 단어 수학

joon_1592·2022년 2월 27일
0

알고리즘

목록 보기
30/51

각 문자별로 계수를 구한 후, 계수가 큰 숫자부터 9, 8, 7, ...을 할당해준다.

문제의 예시를 예로 들면
2
GCF
ACDEB

A = 10,000
B = 1
C = 1,010
D = 100
E = 10
F = 1
G = 100
이고 숫자가 큰 문자부터 9, 8, 7, ... 을 할당해준다.

import sys
#sys.stdin = open('input.txt', 'r')
sys.setrecursionlimit(int(1e5))
input = sys.stdin.readline

N = int(input().rstrip())
char_value = {} # 계수의 문자를 매핑하는 딕셔너리

for _ in range(N):
    s = input().rstrip()
    # 문자의 뒷부분부터 시작
    for i, c in enumerate(s[::-1]):
        char_value[c] = char_value.get(c, 0) + 10 ** i

# numbers의 원소: [계수, 문자]
numbers = []
for char, value in char_value.items():
    numbers.append([value, char])
numbers.sort(reverse=True) # 계수 내림차순으로 정렬


# 계수가 큰 수부터 9, 8, 7,... 할당하고 합계 계산
answer = 0
n = 9
for value, char in numbers:
    answer += value * n
    n -= 1

print(answer)
profile
공부용 벨로그

0개의 댓글