BOJ-1339 - Python

n개의 알파벳으로 이루어진 문장을 입력받는다. 각 알파벳을 숫자로 바꾼 후 합하였을 때 최대값이 무엇인지 출력하는 문제. 첫 풀이는 문자열을 거꾸로 배열에 삽입한 후 자리수가 클 수록 알파벳에 해당되는 수가 커야하는 것을 이용하여 딕셔너리에 저장 여부를 확인하여 값을 할당 후 배열에 값 수정을 하였다. 그 후 배열을 뒤집어 int형으로 형변환하여 더한 값을 출력하여 풀었다. 하지만 자리수 이외에 빈도수 또한 중요도에 영향을 미치기 때문에 틀렸습니다 결과를 받게 되었다. 두번째 풀이는 길이 26의 배열을 만든 후 문자열의 자릿수 만큼 해달 배열의 값을 더해주어 중요도를 저장, 내림차순으로 정렬한 배열에 9부터 중요도를 곱하여 더한 값을 출력하여 풀었다.

# 1339
# n = int(input())
# l = [[0 for _ in range(10)] for _ in range(n)]
# d = {}
# index = 9
#
# for i in range(n):
#     s = input()
#     ls = len(s)
#     for j in range(ls):
#         l[i][ls-j-1] = s[j]
#
# for i in range(9, -1, -1):
#     for y in range(n):
#         if l[y][i] != 0 and l[y][i] not in d:
#             d[l[y][i]] = index
#             l[y][i] = index
#
#             index -= 1
#         elif l[y][i] in d:
#             l[y][i] = d[l[y][i]]
#
# ans = 0
# for i in range(n):
#     rev_l = list(reversed(l[i]))
#     s = ''.join(map(str, rev_l))
#     ans += int(s)
#
# print(ans)

n = int(input())
l = []; ans = 0
alpha = [0 for _ in range(26)]

for _ in range(n):
    l.append(input())

for s in l:
    i = 0
    while s:
        now = s[-1]
        alpha[ord(now) - ord('A')] += pow(10, i)
        i += 1; s = s[:-1]

alpha.sort(reverse=True)
for i in range(9, 0, -1):
    ans += alpha[9-i] * i
print(ans)

Written by@hyesungoh
Learning every moment

InstagramGitHubLinkedIn