본문 바로가기

알고리즘

python 백준1339 단어수학(BOJ1339)

문제링크 :https://www.acmicpc.net/problem/1339

 

1339번: 단어 수학

첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대

www.acmicpc.net

처음에 그냥 자리수별로 9부터 부여하면되는줄알고 풀었는데 답이 틀렸다고 나왔다.

가중치를 계산하는 생각을 하는데 시간이 오래걸렸다.

그리고 파이썬 딕셔너리를 문제풀때 처음 써봤는데 연습하기 딱 좋았다

#단어갯수
n = int(input())

alphabets = []
#알파벳 계산식 입력
for _ in range(n):
  alphabet = input()
  alphabets.append(alphabet)

#가중치 dict
weight = {}

for i in range(n):
  #문자별 가중치 계산
  for j in range(0, len(alphabets[i])):
    if weight.get(alphabets[i][j]) != None:
        weight[alphabets[i][j]] += 10 ** (len(alphabets[i])-1-j)
    else :
      weight[alphabets[i][j]] = 10 ** (len(alphabets[i])-1-j) 

#가중치 정렬
sorted_weight = sorted(weight.items(), key = lambda item : item[1], reverse = True)

#가중치에 따른 숫자가 들어갈 dict
weight_num = {}

#시작 숫자
num = 9

#가중치에따라 숫자 부여
for i in sorted_weight:
  weight_num[i[0]] = str(num)
  num -= 1

#합계
result = 0

#알파벳을 숫자로 치환하고 덧셈
for i in range(n):
  temp = ""
  for j in range(0, len(alphabets[i])):
    temp += weight_num.get(alphabets[i][j])
  result += int(temp)

  #출력
print(result)