https://www.acmicpc.net/problem/1339
import sys
input = sys.stdin.readline
N = int(input())
words = list()
alphabet = dict()
for _ in range(N):
word = input().strip()
words.append(word)
# 각 알파벳의 점수? 자리값 구하기
for i in range(len(word)):
alphabet[word[i]] = alphabet.get(word[i], 0) + 10**(len(word)-i-1)
# 자리 값을 기준으로 정렬
s_li = sorted(alphabet.items(), key=lambda x:x[1], reverse=True)
max_score = 9
score = dict()
# 각 알파벳을 숫자로 변환
for a, b in s_li:
score[a] = max_score
max_score -= 1
dap = 0
# 각 단어를 숫자로 치환해서 계산
for i in range(N):
word = words[i]
sum_words = 0
for j in range(len(word)):
sum_words += ((10**(len(word)-j-1))*score[word[j]])
dap += sum_words
print(dap)
- 최적화된 코드
import sys
input = sys.stdin.readline
N = int(input())
words = list()
alphabet = dict()
for _ in range(N):
word = input().strip()
words.append(word)
# 각 알파벳의 점수? 자리값 구하기
for i in range(len(word)):
alphabet[word[i]] = alphabet.get(word[i], 0) + 10**(len(word)-i-1)
# 자리 값을 기준으로 정렬
s_li = sorted(alphabet.items(), key=lambda x:x[1], reverse=True)
score = 9
dap = 0
# 처음부터 숫자 9~1까지 배정
# 자리 값 * 숫자를 모두 더하기
for a, b in s_li:
dap += b*score
score -= 1
print(dap)'코딩테스트 > 코딩테스트 문제풀이' 카테고리의 다른 글
| [Python] 백준 <12904-A와 B> (0) | 2025.07.10 |
|---|---|
| [Python] 백준 <9205-맥주 마시면서 걸어가기> (0) | 2025.07.08 |
| [Python] 백준 <1946-신입 사원> (0) | 2025.07.07 |
| [Python] 백준 <2589-보물섬> (0) | 2025.07.07 |
| [Python] 백준 <11052-카드 구매하기> (0) | 2025.07.02 |