BaekJoon1339_단어수학

최효준·2023년 3월 10일
0

알고리즘 문제풀이

목록 보기
48/61

문제

풀이

이 문제는 스스로 풀지 못했다. 처음에 풀이는 단순히 가장 큰 자릿수에 위치한 알파벳들부터 높은 숫자를 채우는 방식대로 풀려하였으나 정답이 아니었다.
자세한 풀이는 다음의 블로그를 참고하였다.
https://seongonion.tistory.com/111?category=852500
이 블로그의 글쓴이분도 처음엔 나와 비슷하게 풀이를 진행하였으나 동일한 이유로 틀리고 각 알파벳들의 자릿수를 합친 뒤 그 크기의 순서로 값을 할당하는 방식으로 문제를 푸셨다.

풀이코드

import sys
input = sys.stdin.readline

n = int(input())
alpha = []
value = {}

for _ in range(n):
    alpha.append(list(input().rstrip()))

for alphabet in alpha:
    for i in range(len(alphabet)):
        if alphabet[i] not in value:
            value[alphabet[i]] = 10 ** (len(alphabet) - 1 - i)
        else:
            value[alphabet[i]] += 10 ** (len(alphabet) - 1 - i)
            
value = sorted(value.items(), key=lambda x : x[1], reverse=True)

alpha_to_num = {}

num = 9

for i in value:
    alpha_to_num[i[0]] = num
    num -= 1
answer = 0

for j in alpha:
    num = ""
    for alphabet in j:
        num += str(alpha_to_num[alphabet])
    
    answer += int(num)
    
print(answer)
profile
Not to be Number One, but to be Only One

0개의 댓글