문제풀이) 백준 - 1339 / 단어 수학

velg·2021년 5월 10일
0

문제링크

문제 요약

1. 알파벳 대문자로 구성된 n개의 단어가 주어진다
2. 알파벳을 숫자로 변경하여 단어를 모두 합할 때 가장 큰 값을 구하라

어떻게 풀어야 할까?

1. 숫자로 변경 시 자릿수가 가장 큰 알파벳에 9를 대입해야 하며 이후 차례대로 큰 수를 대입해야 한다.
-> 자릿수는 단어의 길이로 파악하면 될 것이다.

코드

n = int(input())
words = [input() for _ in range(n)]
# 알파벳별 점수를 저장할 딕셔너리
alpha_score = {}

# 점수 자릿수 부여
for word in words:
  digits = 10 ** (len(word)-1)
  for c in word:
    if c in alpha_score:
      alpha_score[c] += digits
    else: 
      alpha_score[c] = digits
    digits //= 10

# value 기준 내림차순 정렬
alpha_score = sorted(alpha_score.items(), key = lambda x:x[1], reverse=True)

num = 9
result = 0

# 가장 큰 점수부터 num을 곱해 결과값에 더해줌
for v in alpha_score:
  result += v[1] * num
  num -= 1

print(result)

코드 풀이

각 단어마다 알파벳, 자릿수(100,1000 ...)가 다르기 때문에 딕셔너리를 사용해서 
key = 알파벳, value = 자릿수를 저장해서 가장 자릿수 점수가 높은 알파벳을 찾는 식으로 해결하였다.

피드백

1. dictionary(이후 dic)를 sorted 할 때 iterable 값으로 dic.items()이 오며 타입 은 list로
, 요소는 tuple 타입으로 묶어서 반환된다.
2. tuple은 immutable하기 때문에 유의해야 한다.
profile
초보 개발자

0개의 댓글