https://www.acmicpc.net/problem/1132
1. ABC, BCA의 경우 101A + 110B + 11C 이므로 9부터 1까지 역으로 정렬후 곱해주면 된다.
2. a 배열의 1번째 값은 알파벳의 자리의 합 2번째는 알파벳이 맨 앞에인지 확인하는 값이다.
3. 만약 정렬후 마지막 값이 앞에 존재할경우 가장 가까운값 중에 앞에 존재하지 않는 값기준으로 땡겨준다.
ex) AB BCD CDE DEF EFG FGH GHI HIJJJ의 경우 A값이 앞에 있는데 정렬후 가장 뒤로간다.
n = int(input())
a = [[0, False] for _ in range(10)] # A B C ..
ans = 0
for _ in range(n):
s = input()
m = 1
a[ord(s[0])-65][1] = True
for c in range(len(s)-1, -1, -1):
a[ord(s[c])-65][0] += m
m *= 10
a.sort(reverse=True)
if a[9][1]:
for i in range(8, -1, -1):
if not a[i][1]:
del a[i]
break
for i in range(9):
ans += a[i][0] * (9-i)
print(ans)
'알고리즘 > BOJ' 카테고리의 다른 글
[Python] 백준 11049: 행렬 곱셈 순서 (0) | 2021.10.02 |
---|---|
[Python] 백준 17070: 파이프 옮기기 1 (0) | 2021.10.02 |
[Python] 백준 17371: 이사 (0) | 2021.09.27 |
[Python] 백준 1398: 동전문제 (0) | 2021.09.27 |
[Python] 백준 2590: 색종이 (0) | 2021.09.26 |
댓글