Algorithm/Math
(Python) - BOJ(1339번) : 단어 수학
하눤석
2022. 1. 26. 09:47
728x90
https://www.acmicpc.net/problem/1339
- 해설 :
알파벳 대문자들로만 이루어진 문자열 N개가 주어진다. 각 알파벳 대문자를 0~9의 숫자로 치환하여 더하였을 때 그 결괏값이 최대가 되는 경우를 구하는 문제이다.
- 풀이 :
문자열에 존재하는 알파벳별 가중치를 계산하기 위한 배열을 만들고, 이 배열에 문자열에 있는 문자들마다의 가중치를 더해준다
예를 들어 ,
ABC라는 문자열이 있다면
배열[A]의 가중치는 100이고
배열[B]는 10
배열[C]는 1이다.
이런 식으로 모든 문자열에 대해 가중치를 정해준 후,
가중치가 높은 알파벳을 9부터 1씩 감소하는 수로 치환해준다.
- 소스코드 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
x = int(input())
num = []
for i in range(x):
num.append(input())
weight = [0 for i in range(26)]
for i in range(len(num)):
x = 0
for j in range(len(num[i])-1,-1,-1):
weight[ord(num[i][j])-ord('A')] += pow(10,x)
x+=1
weight.sort(reverse = True)
ans=0
j = 9
for i in range(10):
ans +=weight[i]*j
j-=1
print(ans)
|
cs |
320x100