본문 바로가기

Algorithm

[파이썬] 백준 17269번: 이름궁합 테스트

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

 

17269번: 이름궁합 테스트

시윤이는 좋아하는 이성이 생기면 가장 먼저 이름궁합부터 본다. 이름궁합을 보는 방법은 간단하다. 먼저 이름을 알파벳 대문자로 적는다. 각 알파벳 대문자에는 다음과 같이 알파벳을 적는데

www.acmicpc.net

len_a, len_b = map(int, input().split(' '))
a, b = map(str, input().split(' '))

alp = {'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}

i = 0
names = ""
for x, y in zip(a, b):
    i += 1
    names += x
    names += y
if len_a > len_b: 
    names = names+a[i:]
else:
    names = names+b[i:]
    
every_list = [alp[x] for x in names]
while True:
    length = len(every_list)
    every_list = [int(str(every_list[i]+every_list[i+1])[-1]) 
                  for i in range(len(every_list)-1)]
    if length == 3:
        break

print(str(int(''.join(list(map(str, every_list))))) + '%')

 

1. 알파벳의 각 획을 {알파벳: 획} 형식의 dict로 만들어줍니다.

2. names에 a와 b 이름을 번갈아가면서 붙여준 후, every_list에 맨 처음 알파벳 획 값으로 설정을 해줍니다.

(예: names: 'LMEIEYSAIWYAUKNISAKURA' 일 경우 각 알파벳 획인

[1, 3, 4, 1, 4, 2, 1, 3, 1, 1, 2, 3, 1, 3, 2, 1, 1, 3, 3, 1, 2, 3]으로 설정)

3. while문을 돌린 후, every_list를 계속 업데이트 해줍니다.

  • i와 i+1을 더해주고 1의 자리 수만 가져옵니다. length가 3이 되면 그대로 멈춥니다.

4. every_list를 모두 합한 후, %를 붙여주고 출력합니다.

(만약 01 이 될 경우 1로 바꿔줘야되기 때문에, str 값을 int로 바꿔준 뒤 다시 str 값으로 변경해줍니다).

 

alp dict를 만들 때 아래와 같이 string의 ascii_uppercase를 사용하여도 가능합니다.

import string
stroke = [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]
alp = dict(zip(list(string.ascii_uppercase), stroke))