본문 바로가기
Algorithm/백준 알고리즘 풀이

[Baekjoon] 17269. 이름 궁합

by newnu 2021. 5. 2.
반응형

# Problem

시윤이는 좋아하는 이성이 생기면 가장 먼저 이름궁합부터 본다. 이름궁합을 보는 방법은 간단하다. 먼저 이름을 알파벳 대문자로 적는다. 각 알파벳 대문자에는 다음과 같이 알파벳을 적는데 필요한 획수가 주어진다. 예를 들어, 두 사람의 이름인 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개만 남았을 때 남은 숫자가 두 사람의 궁합이 좋을 확률이 된다.

과정을 자세히 나타내면 다음과 같다.

따라서 LEESIYUN와 MIYAWAKISAKURA이 궁합이 좋을 확률이 27%이다.

입력

첫 번째 줄에 이름의 길이 N과 M을 받는다. (2 ≤ N, M ≤ 100)

다음 줄에 이름 A와 B를 입력받는다. 이름은 반드시 알파벳 대문자만 주어진다.

출력

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

 

# My Answer

n,m = map(int,input().split())
a,b = input().split()
a=list(a)
b=list(b)
min_ab = min(n,m)
name=[]

alnum = {
    'A':3,
    "B":2,
    "C":1,
    "D":2,
    "E":4,
    "F":3,
    "G":1,
    "H":3,
    "I":1,
    "J":1,
    "K":3,
    "L":1,
    "M":3,
    "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   
}

for i in range(min_ab):
    name.append(a[i])
    name.append(b[i])
if min_ab==n:
    name.extend(b[min_ab:])
else:
    name.extend(a[min_ab:])

for i,al in enumerate(name):
    name[i] = alnum[al]

while len(name)>2:
    result=[]
    for i in range(len(name)-1):
        result.append((name[i]+name[i+1])%10)
    name = result[:]
if name[0]==0:
    print(str(name[1])+"%")
else:
    print(str(name[0])+str(name[1])+"%")

 

# Solution 

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

 

반응형

'Algorithm > 백준 알고리즘 풀이' 카테고리의 다른 글

[Baekjoon] 9037. The candy war  (0) 2021.05.04
[Baekjoon] 16769. Mixing Milk  (0) 2021.05.03
[Baekjoon] 1759.암호 만들기  (0) 2021.04.29
[Baekjoon] 1987. 알파벳  (0) 2021.04.29
[Baekjoon] 9663. N-Queen  (0) 2021.04.29