Odds and Ends
백준: 15312 이름 궁합 [파이썬, 구현] 본문
문제
'이름 궁합'이란 두 사람의 이름을 한 글자씩 번갈아 써 놓고 획수를 그 아래에 적은 뒤, 인접한 숫자끼리 더한 일의 자리 값을 아래에 적어 나가면서 마지막에 남은 두 숫자를 보고 궁합이 맞는 정도를 알아보는 일종의 점이다.
아직도 '그녀'를 잊지 못한 로맨티스트 종민이는 어느 날 그녀와 이름 궁합을 한 번 해 보기로 했는데, 그 결과는 충격적이었다.
이 결과를 도저히 받아들일 수 없었던 종민이는 이것이 틀렸음을 증명하기 위해 열심히 머리를 굴렸고, 다음과 같은 변명거리를 생각해 냈다.
"'그녀'는 한국인이 아니니까 한글로 이름 궁합을 보면 결과가 이상한 것이 당연하지! 세계 공용어인 영어 알파벳으로 이름을 쓰면 결과가 정확하게 나올 거야!"
그래서 종민이는 알파벳 대문자로 이름을 써 놓고 이름 궁합을 보려고 한다. 그런데, 종민이는 손으로 계산을 하면 실수를 할까 두려워 당신에게 프로그램을 짜 달라고 부탁했다. 종민이를 도와주자! 종민이가 정한 알파벳 대문자의 획수는 힌트를 참고하자.
입력
첫 번째 줄에는 종민이의 영어 이름 A 가 주어진다.
두 번째 줄에는 '그녀'의 영어 이름 B 가 주어진다.
A B 모두 알파벳 대문자로만 이루어진 길이 2 이상 2000 이하의 문자열이며, 둘의 길이가 같음이 보장된다. 이름 궁합을 볼 때는 A 의 첫 글자를 먼저 쓴다고 하자.
와
출력
이름 궁합의 결과를 두 자리의 숫자로 출력한다. (십의 자리가 0이어도 두 자리로 출력한다)
예제 입력 1 복사
CJM
HER
예제 출력 1 복사
99
힌트
영어 대문자 알파벳 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 로 정한다. (출제자가 알파벳 대문자를 쓰는 방법이 기준이다)
[문제 풀이]
이름을 순서대로 더해가면서 풀면 되는 문제. 간단하다.
영어 이름 2개를 입력받아, 두 이름의 궁합을 출력하면 된다.
궁합은 알파벳의 획순을 두고, 인접한 것끼리 계속 더해나가면 되는 방식이다. (1의 자리만 나타낸다)
먼저, 문제 힌트에 적힌 대로 각 알파벳 별로 획순을 배열에 미리 저장해둔다.
그리고 문자열 두 개를 입력받아, 알파벳을 번갈아가며 저장하면 된다.
이때 알파벳 자체를 저장하기보단, 알파벳의 획순을 저장한다.
그리고 반복문 안에서 양 옆의 숫자와 계속 더해나가면 된다.
원소가 2개만 남았을 때, 결과를 출력하고 반복문을 멈추면 된다.
N, M = map(int, input().split())
A, B = input().split()
alp = [3,2,1,2,4,3,1,3,1,1,3,1,3,2,1,2,2,2,1,2,1,1,1,2,2,1]
AB = ''
min_len = min(N,M)
for i in range(min_len):
AB += A[i] + B[i]
AB += A[min_len:] + B[min_len:]
lst = [alp[ord(i)-ord('A')] for i in AB]
for i in range(N+M-2):
for j in range(N+M-1-i):
lst[j] += lst[j+1]
print("{}%".format(lst[0]%10*10+lst[1]%10))
'코딩 테스트' 카테고리의 다른 글
백준 : 4158번 CD [파이썬, 실버5, 이분탐색] (0) | 2022.07.11 |
---|---|
백준 : 10816 숫자 카드 2 [파이썬, 실버4, 이분탐색] (0) | 2022.07.11 |
백준 : 1475번 방 번호 [파이썬, 실버5, 구현] (0) | 2022.07.09 |
백준 : 10451 순열 사이클 [파이썬, 실버3] (0) | 2022.07.09 |
백준: 2331 반복수열 [파이썬, 실버 4] (0) | 2022.07.09 |