본문 바로가기
Algorithm/문제 풀이

BOJ백준 1339 단어수학 풀이(Python)

by Marades 2019. 2. 6.
반응형


문제는 위와 같다.


어렸을 때 많이 봤던 방식의 문제였지만 알고리즘 공부를 시작한지 얼마 안되었던 나에게는 어떻게 구현할지 약간 막막했었다.

고민하다가 내가 접근한 방법은 먼저 각각의 알파벳에 곱해지게 될 숫자를 구한 후 곱해지게 되는 숫자가 큰 순으로 정렬한 뒤

차례대로 알파벳 값과 곱해지게 될 숫자를 곱하며 더해주는 방식이였다.


예를 들어, 

GCF와 ACDEB가 있다면

1.  GCF =  100*G + 10*C + 1*F

2. ACDEB = 10000*A + 1000*C + 100*D + 10*E + 1*B

이므로 각 알파벳 별로 곱해지게 될 숫자는

A : 10000

B : 1

C : 1010

D : 100

E : 10

F : 1

이다. 이를 Dictionary 를 이용하여 구현하였고 후에 정렬한 뒤 더해주니 답이 나왔다.


아래는 소스코드이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
wordNum = input()
word = []
for i in range(int(wordNum)):
    temp = input()
    word.append(list(temp))
number = [9876543210]
 
charDic = {}
for i in range(len(word)):
    for j in range(len(word[i])):
        if word[i][j] not in charDic:
            charDic[word[i][j]] = pow(10len(word[i])-j-1)
        else:
            charDic[word[i][j]] += pow(10len(word[i])-j-1)
 
keyList = list(charDic.keys())
for i in range(len(keyList)-1):
    big = i
    for j in range(len(keyList)-i-1):
        if charDic[keyList[j]] < charDic[keyList[j+1]]:
            keyList[j], keyList[j+1= keyList[j+1], keyList[j]
 
result = 0
for i in keyList:
    result += number.pop(0* charDic[i]
 
print(result)
cs


혹시 개선해야할 점이나 지적, 비판할 부분이 있다면 언제든지 환영입니다 :)

반응형