[백준] 1339번 단어 수학

UBIN·2023년 12월 22일
0
post-custom-banner

문제

GCF + ACDEB와 같이 영어단어가 주어지면 덧셈을 한다.
덧셈의 결과가 최대값이 되도록 각 알파벳마다 0 ~ 9를 매칭해라.
단, 각 알파벳은 전부 다른 값을 가진다.
GCF + ACDEB의 경우 A = 9, B = 4, C = 8, D = 6, E = 5, F = 3, G = 7일 때 최대값을 가진다.

ex)

2
GCF
ACDEB

풀이

알파벳이 주어졌을 때 가중치를 두면 쉽게 접근할 수 있다.
GCF + ACDEB의 경우 가중치를 다음과 같이 주는 것이다.

A = 10000
C = 1000 + 10 = 1010
D = 100
G = 100
E = 10
B = 1

이 상태에서 높은 가중치를 가진 알파벳 부터 높은 수를 배정해주면 된다.

더 자세한건 코드를 통해 살펴보자.

import sys
input = sys.stdin.readline

# a ~ z가 가지는 가중치 리스트
alphabetList = [0 for _ in range(26)]
answer = 0

for _ in range(int(input())):
    word = input().rstrip()
    wordLength = len(word)

    for i in range(wordLength):
    	# 알파벳별로 가중치 누적
        alphabetList[ord(word[i]) - 65] += 10 ** (wordLength - i - 1)

# 높은 가중치를 가진 알파벳 순으로 9부터 배정해줌
for idx, weight in enumerate(sorted(alphabetList, reverse = True)):
	# 오름차순 했으니 가중치 0부터는 생략
    if weight == 0:
        break
	
    # 9를 가져가게 되면 다음 알파벳은 8을 가져가게 됨
    answer += weight * (9 - idx)

print(answer)
profile
ubin
post-custom-banner

0개의 댓글