Problem Solving
[BOJ] (구현) 1339번 단어수학
주씨.
2022. 4. 8. 22:44
728x90
Brute force 로 접근하지 말고 수학적으로 풀어서 접근해야 한다.
아래 코드의 맨 아래 주석부분 참고
n = int(input())
data = [list(input())[::-1] for _ in range(n)]
dic = dict()
answer = 0
for i in range(len(data)):
for j in range(len(data[i])):
if data[i][j] not in dic:
dic[data[i][j]] = 0
dic[data[i][j]] += 10**j
arr = sorted(dic.items(), key = lambda x: x[1], reverse=True)
for i in range(len(arr)):
answer += arr[i][1] * (9-i)
print(answer)
# data
# ['F', 'C', 'G']
# ['B', 'E', 'D', 'C', 'A']
# dic
# {'F': 1, 'C': 1010, 'G': 100, 'B': 1, 'E': 10, 'D': 100, 'A': 10000}
https://www.acmicpc.net/problem/1339
1339번: 단어 수학
첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대
www.acmicpc.net