728x90
반응형
BaekJoon 백준 17269 이름궁합 테스트 문제는 두 사람의 이름 알파벳을 대응하는 숫자로 바꾸고 각 숫자와 그 숫자의 오른쪽 숫자와 더하는 과정을 반복하여 숫자가 2개만 남았을 때 남은 숫자인 두 사람의 궁합을 구하여 출력하는 문제이다. 난이도는 Bronze 1이다.
BaekJoon 17269 이름궁합 테스트 문제 정보
출처
- https://www.acmicpc.net/problem/17269
알고리즘 분류
- 문자열 string, 수학, 사칙연산, 구현
난이도
- 브론즈 1 / Bronze 1
이름궁합 테스트 문제 요약
- 먼저 이름을 알파벳 대문자로 적는다. 각 알파벳 대문자에는 알파벳을 적는데 필요한 획수가 주어진다.
- 두 사람의 이름을 알파벳 대문자로 표현한 뒤, 한 글자씩 번갈아가며 적는다.
- 이름이 남을 경우엔 뒤에 남은 글자를 맨 뒤에 적는다.
- 그러고 나서 알파벳을 대응하는 숫자로 바꾸고 각 숫자와 그 숫자의 오른쪽 숫자와 더한 것을 밑에 적는다.
- 더한 숫자가 10이 넘을 경우엔 일의 자리 수만 남긴다.
- 이 과정을 반복하여 숫자가 2개만 남았을 때 남은 숫자가 두 사람의 궁합이 좋을 확률이 된다.
- 이름 A, B와 이름의 길이 N과 M을 입력받는다. (2 ≤ N, M ≤ 100)
- A와 B의 이름궁합이 좋을 확률을 %로 출력한다. 단, 십의 자리가 0일 경우엔 일의 자리만 출력한다.
문제 풀이 과정
- 이름을 입력받고, 두 이름의 알파벳을 번갈아 저장한 뒤 남는 알파벳은 맨 뒤에 저장한다.
- 각 알파벳을 알파벳의 획 수로 변경하여 저장한다.
- 궁합 비교하는 함수를 정의한다.
- 각 숫자와 그 숫자의 오른쪽 숫자와 더한 것을 새로 저장한다. (10이 넘으면 일의 자리 수만 저장한다.)
- 숫자가 2개 남을 때까지 반복하여 재귀 함수를 호출한다.
- 숫자가 2개 남으면 궁합이므로 숫자 2개를 return 한다.
- 궁합의 십의 자리가 0일 경우엔 일의 자리만, 아니면 두 자리 모두 %를 붙여서 출력한다.
코드 및 설명
def compatibility(name, length):
rst = [0] * (length - 1)
# 각 숫자와 그 숫자의 오른쪽 숫자와 더하여 저장
for i in range(length - 1):
num = name[i] + name[i + 1]
# 10이 넘으면 일의 자리 수만 남김
if num >= 10:
rst[i] = num - 10
else:
rst[i] = num
# 숫자 2개 남을 때 까지 궁합 보기
if len(rst) == 2:
return rst
else:
return compatibility(rst, len(rst))
stroke = {'C': 1, 'G': 1, 'I': 1, 'J': 1, 'L': 1, 'O': 1,
'S': 1, 'U': 1, 'V': 1, 'W': 1, 'Z': 1,
'B': 2, 'D': 2, 'N': 2, 'P': 2, 'Q': 2,
'R': 2, 'T': 2, 'X': 2, 'Y': 2,
'A': 3, 'F': 3, 'H': 3, 'K': 3, 'M': 3, 'E': 4}
N, M = map(int, input().split())
A, B = map(list, input().split())
initial = [] # 초기 상태
# 이름 번갈아서 저장
for i in range(N if N < M else M):
initial.append(A[i])
initial.append(B[i])
if N > M:
initial.extend(list(A[-(N - M)::]))
elif N < M:
initial.extend(list(B[-(M - N)::]))
# 숫자로 변경
for i in range(N + M):
initial[i] = stroke[initial[i]]
# 궁합 비교
ans = compatibility(initial, N + M)
if ans[0] == 0:
print(f'{ans[1]}%')
else:
print(f'{ans[0]}{ans[1]}%')
BaekJoon 백준 17269 이름궁합 테스트 문제를 파이썬 python으로 풀어보았다. 난이도는 Bronze 브론즈 1이다.
728x90
반응형
'Algorithm Problem Solving > BaekJoon' 카테고리의 다른 글
[BaekJoon] 백준 14647 준오는 조류혐오야!! (Python / 파이썬) (0) | 2021.08.26 |
---|---|
[BaekJoon] 백준 17294 귀여운 수~ε٩(๑> ₃ <)۶з (Python / 파이썬) (0) | 2021.08.26 |
[BaekJoon] 백준 11383 뚊 (Python / 파이썬) (0) | 2021.08.25 |
[BaekJoon] 백준 16433 주디와 당근농장 (Python / 파이썬) (0) | 2021.08.25 |
[BaekJoon] 백준 8974 희주의 수학시험 (Python / 파이썬) (0) | 2021.08.25 |
댓글