[BaekJoon/Python] 백준 1339 단어수학

김시현 Si Hyeon, Kim·2022년 1월 16일
0

Algorithm

목록 보기
8/9
post-custom-banner

문제 요약 설명

알파벳으로 이루어진 단어들이 주어질 때 각 알파벳을 0~9까지의 숫자중 하나로 바꾸어서 다 더한 값이 최대가 되도록 하세요

아이디어

사이즈가 26(A부터 Z까지 알파벳 갯수)인 1차원 배열을 생성하여 0으로 초기화 시켜놓고, 주어진 단어에서 각 알파벳마다 자릿수를 곱한 뒤 배열에 그 값을 더해준다.
예를 들면
"AAA" 라는 단어가 주어진다면
100xA + 10xA + 1xA = 111A이므로 1차원 배열에서 A의 위치인 0의 자리에 111을 더해준다.
해당 과정이 끝난 후, 문제에서 주어진 알파벳은 최대 10개라고 하였으므로 1차원 배열을 내림차순 정렬로 정렬한뒤 index 0~9까지만 탐색을 한다. 가장 큰 자릿수값을 가진 알파벳이 0번째 index에 있을 것이므로 해당 알파벳은 9로 바꾸면 가장 큰 값이 나온다. 1번째 index는 8로 바꾸고 2번째는 7..... 9번째는 0을 부여한다.

풀이

  1. 사이즈가 26인 배열을 만든다.
  2. 단어가 하나 입력되면 단어 내 알파벳의 위치에 따라 자릿값을 게산하여 배열에서 해당 알파벳의 위치에 자릿값을 더해준다.
  3. 배열에 값이 전부 입력완료 되면 내림차순 정렬해주고 0~9번째까지에 들어가 있는 값들만 탐색해주면 된다.
  4. 0번째 index에 들어가 있는 알파벳이 가장 큰 수를 차지하고 있는 것이기 때문에 9라는 숫자를 부여받게 되고 해당 자릿값에 x9를 한 값을 result에 더한다.
  5. 1번째 index에 들어가 있는 알파벳은 8을 부여받고 해당 자릿값에 x8을 한 뒤 result에 더한다.
    ...
    ...
  6. 9번째 index에 들어가 있는 알파벳은 0을 부여받고 해당 자릿값에 x0을 한 result에 더한다.
  7. result를 출력한다.

코드

import sys
r = sys.stdin.readline

N = int(r())
alpha = [[0 for col in range(2)] for row in range(26)]
for i in range(26):
    alpha[i][0] = ord('A') + i
for i in range(0, N):
    input = r().rstrip()
    for idx, j in enumerate(input):
        loc = len(input) - idx - 1
        alpha[ord(j)-ord('A')][1] += (10 ** loc)

alpha.sort(key=lambda x:x[1], reverse=True)

num = 9
sum = 0
for i in range(10):
    sum += (alpha[i][1] * num)
    num -= 1

print(sum, end='')
profile
최악의 환경에서 최선을 다하자!!
post-custom-banner

0개의 댓글