[파이썬] 백준 15312 : 이름 궁합

728x90

[파이썬] 백준 15312 : 이름 궁합

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

 

15312번: 이름 궁합

영어 대문자 알파벳 26개의 획수는 순서대로 3, 2, 1, 2, 3, 3, 2, 3, 3, 2, 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1 로 정한다. (출제자가 알파벳 대문자를 쓰는 방법이 기준이다)

www.acmicpc.net

브론즈 1

DP, 구현, 문자열


획수에 대한 기준은 문제의 힌트에 명시되어 있다.

그냥 문제에서 요구하는 조건 그대로 구현하면 쉽게 풀린다.

인접한 두 수의 합을 10으로 나눈 나머지를 리스트에 재할당하되, pop으로 마지막 원소를 제거하는 식으로 숫자를 줄여나갔다. 

특히, 리스트의 원소가 int일 경우 반복문 순회가 어렵기 때문에 문자열로 변환하여 보관하도록 했다.

 

종민이와 그녀의 이름이 2이상 2000이하의 문자열이라는 조건을 못보고 풀다가 시간 많이 잡아 먹었다.

pypy3로 제출해야 정답처리 된다.

 

코드

import sys; input = sys.stdin.readline
alpah = {'A': 3, 'B': 2, 'C' : 1, 'D' : 2, 'E' : 3, 'F' : 3, 'G' : 2, 
         'H' : 3, 'I' : 3, 'J' : 2, 'K' : 2, 'L' : 1, 'M' : 2, 'N' : 2, 
         'O': 1, 'P' : 2, 'Q': 2, 'R': 2, 'S' : 1, 'T' : 2, 'U': 1, 'V' : 1, 
         'W' : 1, 'X' : 2, 'Y' : 2, 'Z' : 1}
man = input().rstrip()
woman = input().rstrip()
lst = []
for i in range(len(man)):
    lst.append(man[i])
    lst.append(woman[i])
for i in range(len(lst)):
    lst[i] = str(alpah[lst[i]])
while True:
    for i in range(len(lst)-1):
        lst[i] = str((int(lst[i]) + int(lst[i+1])) % 10)
    lst.pop()
    if len(lst) == 2:
        for i in lst:
            print(int(i), end='')
        break
728x90