반응형
문제는 위와 같다.
어렸을 때 많이 봤던 방식의 문제였지만 알고리즘 공부를 시작한지 얼마 안되었던 나에게는 어떻게 구현할지 약간 막막했었다.
고민하다가 내가 접근한 방법은 먼저 각각의 알파벳에 곱해지게 될 숫자를 구한 후 곱해지게 되는 숫자가 큰 순으로 정렬한 뒤
차례대로 알파벳 값과 곱해지게 될 숫자를 곱하며 더해주는 방식이였다.
예를 들어,
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 = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 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(10, len(word[i])-j-1) else: charDic[word[i][j]] += pow(10, len(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 |
혹시 개선해야할 점이나 지적, 비판할 부분이 있다면 언제든지 환영입니다 :)
반응형
'Algorithm > 문제 풀이' 카테고리의 다른 글
BOJ 백준 6236 용돈관리 풀이(C++) (0) | 2019.02.11 |
---|---|
BOJ백준 9019 DSLR 풀이(C++) (1) | 2019.02.08 |
BOJ백준 2293 동전1 풀이(Python) (0) | 2019.02.08 |
BOJ백준 1890 점프 풀이(Python) (0) | 2019.02.06 |
BOJ백준 1748 수 이어 쓰기1 풀이(C++) (0) | 2019.02.06 |