-문제: https://www.acmicpc.net/problem/1339
1339번: 단어 수학
첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대
www.acmicpc.net
개인적으로 어려웠던 문제. 딕셔너리를 사용해서는 처음 풀어보았다. 좀 더 공부하자!
-정답풀이:
n=int(input())
alpha=[] #단어를 저장할 리스트
alpha_dict={} #단어 내의 알파벳별로 수를 저장할 딕셔너리
numList=[] #수를 저장할 리스트
for i in range(n):
alpha.append(input().rstrip())
for i in range(n):#모든 단어에 대해서
for j in range(len(alpha[i])): #i번째 단어의 길이만큼 실행
if alpha[i][j] in alpha_dict: #단어의 알파벳이 이미 dict에 있다면
alpha_dict[alpha[i][j]] += 10**(len(alpha[i])-j-1)
else:
alpha_dict[alpha[i][j]] =10**(len(alpha[i])-j-1)
for val in alpha_dict.values(): #dict에 저장된 수들(밸류들)을 모두 numList에 추가
numList.append(val)
numList.sort(reverse=True)#수들 큰수부터(내림차순으로) 정렬
s=0
pows=9
for i in numList:
s+= pows*i
pows-=1
print(s)
- 입력되는 단어들을 리스트로 입력하고
- 각 알파벳의 위치에 맞는 10승을 딕셔너리에 대입한다('A': 10^5)
- 딕셔너리의 밸류들을 numList에 대입한 후 큰 순서로 정렬한다
- 그리고 큰 것부터 pows를 곱해가면서 더하면된다(이때 pows는 단계마다 1씩 줄어든다)
'백준 > Greedy' 카테고리의 다른 글
[코딩테스트] 백준 1439번: 뒤집기 (0) | 2022.01.23 |
---|---|
[코딩테스트] 백준 4796번: 캠핑 (0) | 2022.01.23 |
[코딩테스트] 백준 1715번: 카드 정렬하기 (0) | 2022.01.22 |
[코딩테스트] 백준 1946번: 신입사원 (0) | 2022.01.21 |
[코딩테스트] 백준 13305번: 주유소 (0) | 2022.01.21 |