[Python] 백준 1339- 단어수학

혜원·2023년 1월 8일
0

백준

목록 보기
22/25

백준 1339- 단어수학

문제

코드

import sys
input=sys.stdin.readline

dic={}
alp_num={}
list=[]
sum=0
N=int(input())

for _ in range(N):
  alp=input()
  length=len(alp)
  list.append([alp,length-1])
  for i in range (length-1):
    if alp[i] in dic:
      dic[alp[i]]+=10**(length-2-i)
    else:
      dic[alp[i]]=10**(length-2-i)

sort_dic = sorted(dic.items(), key = lambda item: item[1], reverse=True)

for i in range (len(sort_dic)):
  alp_num[sort_dic[i][0]]=9-i

for i in range(N):
  for j in range(list[i][1]):
    sum+=alp_num.get(list[i][0][j])*(10**(list[i][1]-j-1))

print(sum)

해설

아이디어

  1. 단어의 갯수는 최대 10개이므로 자릿수가 제일 큰 알파벳에게 제일 큰 숫자를 대입해주면 된다.
  2. 같은 자릿수에 알파벳이 여러개 존재한다면 더 큰 자릿수에 더 많이 사용된 알파벳에 더 큰 숫자가 대입되어야한다.
  3. 1,2를 만족시키기위해 가중치를 두어서 구현하였다.
  4. 단어갯수가 최대 10개이므로 가중치는 10의 거듭제곱을 이용하였다.

구현

  1. 첫번째 for문에서는 단어를 입력받으면서 가중치를 계산한다. 이때 이 단어는 나중에 계산할때 쓰이므로 list에 단어와 길이를 저장한다. 가중치는 딕셔너리를 이용하였는데, key에는 알파벳, value에는 가중치를 넣었다.

  2. 가중치가 큰 순서대로 정렬을 해준다.

  3. 다시 딕셔너리 alp_num을 사용해서 key값에는 알파벳 value에는 대입할 숫자를 넣어준다.

  4. alp_num을 이용해서 값을 구해준다.

profile
안녕하세요

0개의 댓글