-문제: 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씩 줄어든다)

+ Recent posts