알고리즘
백준 25501 - 재귀의 귀재 (python)
jamie2779
2023. 2. 5. 07:52
문제
https://www.acmicpc.net/problem/25501
25501번: 재귀의 귀재
각 테스트케이스마다, isPalindrome 함수의 반환값과 recursion 함수의 호출 횟수를 한 줄에 공백으로 구분하여 출력한다.
www.acmicpc.net
풀이
문제에서 팰린드롬 여부를 판단하는 험수가 미리 작성되어 있으므로 이 코드를 이용하여 isPalindrome함수의 반환값과 recursion함수의 호출횟수를 출력하기만 하면 된다.
아래 코드가 문제에서 제공 된 isPalindrome함수이다:
def recursion(s, l, r):
if l >= r: return 1
elif s[l] != s[r]: return 0
else: return recursion(s, l+1, r-1)
def isPalindrome(s):
return recursion(s, 0, len(s)-1)
print('ABBA:', isPalindrome('ABBA'))
print('ABC:', isPalindrome('ABC'))
해당 코드의 동작 방식을 보면
1. recursion함수는 문자열(s)과 정수(l, r)을 입력받아 s의 l번째와 r번째 글자를 비교한다.
2. 비교한 두 문자가 다르면 0을 반환하고 반복을 중단하고, 비교한 문자열이 다르면 l+1, r-1로 recursion함수를 다시 실행한다.
3. 모든 글자를 비교하면 1을 반환하고 반복을 중단한다.
실행 횟수를 저장할 전역변수를 선언하고, recursion함수가 실행 될 때 마다 1씩 더해 준 후 출력하면 된다.
프로그램을 완성하면 아래와 같다.
count = 0 #호출 횟수를 저장 할 변수 선언
def recursion(s, l, r):
global count #전역변수 사용을 위해 global 사용
count += 1 #count에 1 더하기
if l >= r: return 1
elif s[l] != s[r]: return 0
else: return recursion(s, l+1, r-1)
def isPalindrome(s):
global count #전역변수 사용을 위해 global 사용
count = 0 #count 변수 초기화
return recursion(s, 0, len(s)-1)
T = int(input())
for i in range(T):
S = input()
print(isPalindrome(S),count)