[백준] q1339 단어 수학
문제
알파벳 대문자로만 이루어진 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))
댓글남기기