[백준] 25501: 재귀의 귀재 - 파이썬[python]

다인·2024년 10월 16일

백준

목록 보기
79/112
post-thumbnail

팰린드롬인지 찾는 방법은 문제에서 힌트로 다 줬다. recursion의 횟수만 구하면 되는 문제이다. 이 방법을 2가지로 풀어보았다.

1. 전역변수 사용

import sys
input = sys.stdin.readline

T = int(input())

def recursion(s, l, r):
    global count
    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):
    return recursion(s, 0, len(s)-1)

for _ in range(T):
    count = 0
    print(isPalindrome(input().strip()), count)
  • 전역변수를 recursion함수에 선언해주고 recursion이 호출될 때마다 전역변수를 +1 해준다.
  • 각 테스트케이스마다 전역변수는 초기화해준다.

2. 2개 return

import sys
input = sys.stdin.readline

T = int(input())

def recursion(s, l, r, count):
    count += 1
    if l >= r:
        return 1, count
    elif s[l] != s[r]:
        return 0, count
    else:
        return recursion(s, l+1, r-1, count)

def isPalindrome(s):
    count = 0
    return recursion(s, 0, len(s)-1, count)

for _ in range(T):
    print(*isPalindrome(input().strip()))
  • 이번에 처음 알았는데 파이썬은 return에 2개 이상의 값을 반환해줘도 된다고 한다. 대신 이때 튜플로 반환된다고 한다.
  • 이를 이용하여 recursion함수에서 기존의 return값 외에 count값도 리턴해 주었다.
  • 이번에는 count값은 isPalindrome을 호출할 때마다 초기화해주어야 하므로 isPalindrome 함수에서 초기화해준다.
  • 앞서 말했 듯, 2개 이상의 값을 반환하면 튜플로 반환되기에 이를 '1 3' 형식으로 출력하기 위해 *를 사용한다.

0개의 댓글