https://www.acmicpc.net/problem/15312
문제
알파벳 대문자로 주어지는 이름을 가지고 이름 궁합을 보고 그 결과를 출력하는 문제이다.
이름 궁합은 각 글자의 획수를 번갈아가며 나열하고, 양 옆 획수를 더하고 일의 자리만 남기는 것을 반복하여 두 자리만 남았을 때 멈춘다. 남은 두 자리가 궁합 결과이다.
풀이
힌트에 있는 알파벳 획수에 맞추어 이름을 획수로 바꿔주고, 번갈아가며 나열해준다. 그 후 양 옆칸을 더하고 10 으로 나눠서 나머지를 남겨놓는다.
알파벳 획수에 맞추어 이름을 바꿔줄 때는 리스트나 딕셔너리를 활용하면 편할 듯 하다. 아래 코드는 딕셔너리를 사용하였다.
두 자리 남을 때 까지 획수로 만들어진 숫자들을 양 옆으로 더하고 나머지를 구하며 반복한다. 어차피 문제에서 이름의 길이는 같기 때문에 둘 중 하나의 리스트를 기준으로 해주면 된다.
코드
him = input()
her = input()
him_list = []
her_list = []
num_list = []
alphabet = {'A': 3, 'B': 2, 'C': 1, 'D': 2, 'E': 3, 'F': 3, 'G': 2, 'H': 3, 'I': 3, 'J': 2, 'K': 2, 'L': 1, 'M': 2, '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(len(him)):
him_list.append(alphabet[him[i]])
her_list.append(alphabet[her[i]])
for i in range(len(him_list)):
num_list.append(him_list[i])
num_list.append(her_list[i])
while (len(num_list) > 2):
new_list = []
for i in range(len(num_list)-1):
new_list.append((num_list[i] + num_list[i+1]) % 10)
num_list = new_list
print(f'{num_list[0]}{num_list[1]}')
'Online Judge > Baekjoon' 카테고리의 다른 글
[Baekjoon 1158] 요세푸스 문제 | Python (0) | 2024.08.31 |
---|---|
[Baekjoon 10431] 줄세우기 | Python (0) | 2024.08.31 |
[Baekjoon 28064] 이민희진 | Python (0) | 2024.08.31 |
[Baekjoon 18870] 좌표 압축 | Python (0) | 2024.08.31 |
[Baekjoon 21920] 서로소 평균 | Python (0) | 2024.08.30 |