[백준] 1339 단어 수학

새싹·2021년 11월 10일
0

알고리즘

목록 보기
19/49

📌문제 링크

1339 단어 수학

💡 문제 풀이

문제 읽고 처음 생각한 풀이 방법
1. 가장 많이 나온 알파벳
2. 가장 큰 자릿수에 있는 알파벳
부터 순서대로 9부터 배정한다.

근데 이걸 어떻게 카운트하지...
1. 가장 긴 문자열을 찾는다.
2. 그 문자열의 첫 번째 알파벳을 9로 만든다.

이렇게 생각하다가 떠오른 방법!!!

  1. 딕셔너리를 만들어서 key를 알파벳으로, value를 다 0으로 초기화한다.
  2. 해당 문자의 value에 10 ** (자리수) 만큼 더해준다
  3. value값이 큰 것부터 정렬한 뒤 문자열에 순서대로 9부터 배정한다.
  4. value에 배정한 숫자만큼 곱해서 더해준다

📋코드

# 1339 단어 수학
n = int(input())
words = {
    'A': 0, 'B': 0, 'C': 0, 'D': 0, 'E': 0, 'F': 0, 'G': 0,
    'H': 0, 'I': 0, 'J': 0, 'K': 0, 'L': 0, 'M': 0, 'N': 0,
    'O': 0, 'P': 0, 'Q': 0, 'R': 0, 'S': 0, 'T': 0, 'U': 0,
    'V': 0, 'W': 0, 'X': 0, 'Y': 0, 'Z': 0
}

for i in range(n):
    word = input()
    length = len(word)
    for j in range(length):
        words[word[j]] += 10 ** (length - j - 1)

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

result = 0
# 입력 조건이 알파벳 종류는 10가지를 넘지 않는다는 거니까 10까지만 카운트해주면 된다.
for i in range(10):
    result += sorted_words[i][1] * (9 - i)

print(result)

0개의 댓글