이름궁합 테스트-백준 17269번(python)

JunSung Choi·2020년 2월 27일
0

알고리즘

목록 보기
3/20

문제

시윤이는 좋아하는 이성이 생기면 가장 먼저 이름궁합부터 본다. 이름궁합을 보는 방법은 간단하다. 먼저 이름을 알파벳 대문자로 적는다. 각 알파벳 대문자에는 다음과 같이 알파벳을 적는데 필요한 획수가 주어진다. 예를 들어, 두 사람의 이름인 LEESIYUN, MIYAWAKISAKURA 를 같이 표현했을 때 다음과 같이 먼저 주어진 이름부터 한 글자씩 적는다.

두 사람의 이름을 알파벳 대문자로 표현한 뒤, 한 글자씩 번갈아가며 적는다.

예시 : L M E I E Y S A I W Y A U K N I S A K U R A

예시처럼 이름이 남을 경우엔 뒤에 남은 글자인 S A K U R A를 맨 뒤에 적는다. 그러고 나서 알파벳을 대응하는 숫자로 바꾸고 각 숫자와 그 숫자의 오른쪽 숫자와 더한 것을 밑에 적는다. 더한 숫자가 10이 넘을 경우엔 일의 자리 수만 남긴다. 이 과정을 반복하여 숫자가 2개만 남았을 때 남은 숫자가 두 사람의 궁합이 좋을 확률이 된다.

입력

첫 번째 줄에 이름의 길이 N과 M을 받는다. (2 ≤ N, M ≤ 100)
다음 줄에 이름 A와 B를 입력받는다. 이름은 반드시 알파벳 대문자만 주어진다.

출력

A와 B의 이름궁합이 좋을 확률을 %로 출력한다. 단, 십의 자리가 0일 경우엔 일의 자리만 출력한다.

풀이

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 = ""
end = min(N, M)

for i in range(end):
    AB += A[i] + B[i]
AB += A[end:] + B[end:]

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))

일단 먼저 알파벳 횟수를 배열에 넣어놓고 시작했다. 그리고 첫번째 반복문을 통해 문자열을 서로간에 합치고 A,B 중에 [end:]로 했을때 남아있는 문자열이 있으면 붙여주고 없으면 ""로 붙여주어 AB를 만들어냈다.
또한, 중요한 것이 ord를 사용해 아스키 코드를 계산했다. alp 는 A 알파벳부터 해당하는 획수가 순서대로 들어가 있기 때문에 문자의 아스키코드값에서 'A'의 아스키코드값을 빼면 A의 몇번째 뒤에 해당 문자가 있는지 알 수 있는 개념이다.

profile
Frontend Developer

0개의 댓글