소스코드
n = int(input())
digit = [0]*26
for _ in range(n):
num = list(input().rstrip())
for i in range(len(num)):
digit[ord(num[i])-65] += 10 ** (len(num)-i-1)
digit.sort(reverse=True)
ans = 0
dig = 9
for i in digit:
if not i:
break
ans += i*dig
dig -= 1
print(ans)
알고리즘
이 문제는 그리디를 이용하여 풀 수 있는 문제이다.
찾아보니 딕셔너리를 이용한 풀이가 많았는데 입력이 대문자 알파벳이란 특성을 가지고 푸는 풀이가 있어서 힌트를 얻어 풀 수 있었다.
ord('A')는 A의 아스키 코드 65를 나타내어서 알파벳마다 몇번 포함이 되었는지를 저장하는 배열에 추가하였다.
digit[ord(num[i])-65] += 10 ** (len(num)-i-1)
이 부분인데
A : digit[0] += 10**4
B : digit[1] += 10**3
이런 느낌이다.
리스트를 정렬하면
[1000,101,10]이런 형태로 정렬이 되고최대 숫자부터 9,8,7,... 곱해서 더해주면 된다.
'Coding test' 카테고리의 다른 글
[백준/3085/파이썬] 사탕게임 - 브루트포스 (0) | 2023.01.27 |
---|---|
[백준/1476/파이썬] 날짜계산 - 브루트포스 (0) | 2023.01.26 |
[백준/1107/파이썬] 리모컨 - Brute force (0) | 2023.01.24 |
[백준/1463/파이썬] 1로 만들기 - DP (0) | 2023.01.23 |
[백준/6588/파이썬] 골드바흐의 추측 (0) | 2023.01.22 |