본문 바로가기
ALGORITHM/BAEKJOON

[BOJ/Python] 1339. 단어 수학

by 안녕나는현서 2021. 10. 4.
728x90

📌 문제

https://www.acmicpc.net/problem/1339

 

1339번: 단어 수학

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

www.acmicpc.net

 

📌 문제 접근 방법

  1. 처음에는 맨 앞에 나온 알파벳에 가장 큰 숫자를 대입했다.
  2. 하지만, 
    '''
    10
    ABB
    BB
    BB
    BB
    BB
    BB
    BB
    BB
    BB
    BB
    '''​
    이러한 입력 값이 들어온다면 틀리게 된다.
  3. 따라서, 각 자리수마다 들어오는 알파벳을 리스트에 넣고 해당 자리의 값을 곱하여 계산하였다.
  4. 계산값이 가장 큰 값부터 큰 숫자를 대입하면 가장 큰 숫자를 찾을 수 있다.

 

📌 코드

from collections import defaultdict

N = int(input())

words = []
max_len = 0

for _ in range(N):
    temp = input()
    
    words.append(temp)
    max_len = max(max_len, len(temp))

# 각 자리수에 계산될 알파벳
calculate = [[] for _ in range(max_len)]

for word in words:
    start = max_len - len(word)
    for i in range(start, max_len):
        calculate[i].append(word[i-start])

# print(calculate)

cnt = defaultdict(int)
for j in range(max_len):
    for alpha in set(calculate[j]):
        cnt[alpha] += calculate[j].count(alpha) * 10**(max_len-1-j)

cnt_value = sorted(cnt.values(), key=lambda x : -x)
# print(cnt_value)

answer = 0
number = 9
for value in cnt_value:
    answer += number*value
    number -= 1

print(answer)
728x90

댓글