[백준] q1339 단어 수학

최대 1 분 소요

문제

알파벳 대문자로만 이루어진 N개의 단어가 주어진다. 각 알파벳 대문자를 숫자로 바꿔서 N개의 수를 합한다. 주어진 단어의 합이 최대가 되도록 하라.

어떻게 풀 것인가?

각 알파벳이 나타내는 자릿수를 구한다. 나타내는 자릿수가 큰 알파벳부터 큰 수를 배정한다.

# 단어의 개수 N을 입력받기
N = int(input())
char = []
for i in range(N):
    char.append(input())

# 각 알파벳이 나타내는 자릿수를 구하기
data = dict()
for c in char:
    digit = len(c)
    for i in range(digit):
        if c[i] in data:
            data[c[i]] += 10 ** (digit - i - 1)
        else:
            data[c[i]] = 10 ** (digit - i - 1)

# Dictionary 값으로 내림차순 정렬하기
data_list = sorted(data.items(), key=lambda x: x[1], reverse=True)

# 나타내는 자릿수가 큰 알파벳부터 큰 수를 배정
n = 9
for e in data_list:
    data[e[0]] = n
    n -= 1

# 알파벳을 숫자로 바꾸기
trans = []
for c in char:
    temp = ''
    digit = len(c)
    for i in range(digit):
        temp += str(data[c[i]])
    trans.append(int(temp))

# 변환된 수의 합 출력
print(sum(trans))

카테고리:

업데이트:

댓글남기기