프로그래밍/Algorithm

백준 단어수학 파이썬

모지사바하 2021. 2. 18. 00:09
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
= int(input())
words = [input() for _ in range(int(N))]
 
= {}
for word in words:
  for i, s in enumerate(reversed(word)):
    if s in d:
      d[s]+= pow(10, i)
    else:
      d[s] = pow(10, i)
 
digit = 9
= sorted(d.items(), reverse=True, key=lambda x: x[1])
 
result = 0
for k in d:
  result+=k[1* digit
  digit-=1
 
print(result)  
cs

 

이 문제를 푸는데 핵심 아이디어는 알파벳의 자릿수의 위치에 해당하는 숫자 단위를 구한후, 모두 더해주는것이다.

가장 큰 자릿수에 가장 큰 숫자인 9를 할당해주면 되므로 각 알파벳의 위치에 해당하는 숫자 단위를 구하여 저장한 후, 

숫자 단위를 내림차순으로 정렬하여 9부터 순차적으로 곱한 값을 sum 하면 정답이다.

예를들어, GCF+ACDEB 인 경우,

ACDEB 에서 A는 10000

그 다음 C 는 ACDEB 의 1000 단위와 GCF의 10 단위에 있으므로  1010

D 는 100

E는 10

B 는 100

G는 100

F는 1

 

위와 같이 할당한 후, 이 값을 숫자 내림차순으로 정렬하면 아래와 같다.

[('A', 10000), ('C', 1010), ('G', 100), ('D', 100), ('E', 10), ('F', 1), ('B', 1)]

아래와 같이 가장 큰 단위의 값에 가장 큰 수인 9 부터 차례로 할당한 후 sum 하면 정답이다.

1
2
3
4
5
6
digit = 9
result = 0
for k in d:
  result+=k[1* digit
  digit-=1
 
cs