https://www.acmicpc.net/problem/1339
1339번: 단어 수학
첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대
www.acmicpc.net
풀이 과정
- 각각의 알파벳이 있는 자리가 1이라고 할 때 모두 더했을때 값이 얼마나 나오는지 구한다.
- 예를 들어, Axxxx + xxAxx라 하면 10100이 나온다.
- (1)에서 구한 값들중 가장 큰 값에 9를 부여하고, 다음 큰 값에 8을 부여하고 , .. 이러한 방식으로 값을 부여해준 다음 합계를 구해 준다.
- 값을 부여할 때는, (1)에서 구한 값에 부여한 값을 곱해주면 된다.
- 값을 부여한 후, 그대로 더한다.
- (2)에서 구한 합계를 출력해 준다.
소스 코드
import sys
from collections import defaultdict
input = lambda: sys.stdin.readline().rstrip()
alpha = defaultdict(lambda: 0)
N = int(input())
for _ in range(N):
word = input()
size = len(word)
for idx, ch in enumerate(word):
alpha[ch] += (10 ** (size-1-idx))
temp = sorted(alpha.values(), reverse=True)
pos = 0
answer = 0
for i in range(9, 0, -1):
answer += temp[pos] * i
pos += 1
if pos == len(temp):
break
print(answer)
'알고리즘[Python] > 백준 알고리즘' 카테고리의 다른 글
[ 2688 ] [ DP ] 줄어들지 않아 (0) | 2022.01.06 |
---|---|
[ 1826 ] [ Greedy ] 연료 채우기 (0) | 2022.01.05 |
[ 16918 ] [ 구현 ] 봄버맨 (0) | 2022.01.04 |
[ 17352 ] [ Union-Find ] 여러분의 다리가 되어 드리겠습니다 (0) | 2022.01.03 |
[ 9440 ] [ Greedy ] 숫자 더하기 (0) | 2022.01.01 |