본문 바로가기
알고리즘/[python] 백준 BOJ

[python] 백준 1339 단어 수학

by Alan_Kim 2023. 2. 8.
728x90
반응형

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

 

1339번: 단어 수학

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

www.acmicpc.net

문제 해결

  •  모든 알파벳에 1을 대입 했을 때 자리수를 고려하여 큰 수부터 차례대로 9부터 1까지 넣으면 될 것이다.
    • ex) ABA + ABCA : A = 101+1001 = 1102, B = 10+100 = 110,  C = 10
      • A = 9대입 B = 8 대입, C = 7대입

CODE

import sys

n = int(input()) # 단어 개수
S = [] # 단어를 저장할 리스트
M = dict() # 단어 내의 알파벳별로 수를 저장할 딕셔너리
num = []  # 수를 저장할 리스트

for _ in range(n): # 단어를 입력받음
    S.append(input().strip())

for i in range(n):
    for j in range(len(S[i])): # 각 단어를 하나씩 뜯어본다.
        if S[i][j] in M:
            M[S[i][j]] += 10**(len(S[i])-j-1)
        else:
            M[S[i][j]] = 10**(len(S[i])-j-1)
for val in M.values():
    num.append(val)

num.sort(reverse=True) # 내림차순 정리. 큰 수 부터 정리

ans = 0
pows = 9 # 숫자 9부터 알파벳에 차레대로 대응시킬 것이다.
for i in num: # 큰 수부터 뽑을 것이다.
    ans += pows*i
    pows -= 1
print(ans)
728x90
반응형

댓글