[백준] 15312 이름 궁합

Python
avatar
2025.06.15
·
5 min read

문제

'이름 궁합'이란 두 사람의 이름을 한 글자씩 번갈아 써 놓고 획수를 그 아래에 적은 뒤, 인접한 숫자끼리 더한 일의 자리 값을 아래에 적어 나가면서 마지막에 남은 두 숫자를 보고 궁합이 맞는 정도를 알아보는 일종의 점이다.

아직도 '그녀'를 잊지 못한 로맨티스트 종민이는 어느 날 그녀와 이름 궁합을 한 번 해 보기로 했는데, 그 결과는 충격적이었다.

6818

이 결과를 도저히 받아들일 수 없었던 종민이는 이것이 틀렸음을 증명하기 위해 열심히 머리를 굴렸고, 다음과 같은 변명거리를 생각해 냈다.

"'그녀'는 한국인이 아니니까 한글로 이름 궁합을 보면 결과가 이상한 것이 당연하지! 세계 공용어인 영어 알파벳으로 이름을 쓰면 결과가 정확하게 나올 거야!"

그래서 종민이는 알파벳 대문자로 이름을 써 놓고 이름 궁합을 보려고 한다. 그런데, 종민이는 손으로 계산을 하면 실수를 할까 두려워 당신에게 프로그램을 짜 달라고 부탁했다. 종민이를 도와주자! 종민이가 정한 알파벳 대문자의 획수는 힌트를 참고하자.


입력

첫 번째 줄에는 종민이의 영어 이름 AA가 주어진다. 

두 번째 줄에는 '그녀'의 영어 이름 BB가 주어진다.

AABB 모두 알파벳 대문자로만 이루어진 길이 22 이상 20002\, 000 이하의 문자열이며, 둘의 길이가 같음이 보장된다. 이름 궁합을 볼 때는 AA의 첫 글자를 먼저 쓴다고 하자


출력

이름 궁합의 결과를 두 자리의 숫자로 출력한다. (십의 자리가 0이어도 두 자리로 출력한다)


내 풀이

import sys
input = sys.stdin.readline

name1 = input().strip()
name2 = input().strip()

stroke = [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]
strokes = {chr(k):v for k, v in zip(range(ord('A'), ord('Z')+1), stroke)}

combi = "".join([x+y for x, y in zip(name1, name2)])
combi = [strokes[x] for x in combi]

score = combi
while len(score) > 2:
    score = [(score[i] + score[i+1]) % 10 for i in range(len(score) - 1)]

print(f"{score[0]}{score[1]}")

코멘트

백준 17202 핸드폰 번호 궁합 문제와 비슷한 유형이다. 핸드폰 번호 궁합 문제는 브론즈라서 번호를 문자열 슬라이싱해서 계산해도 시간 초과가 나지 않지만 이 문제는 같은 방식으로 풀면 시간 초과가 나게 된다. 이 때 문자열 슬라이싱을 하지 않고 리스트에서 바로 처리하도록 하면 시간 초과 없이 정답을 받을 수 있다.


References

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

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







- 컬렉션 아티클