본문 바로가기

알고리즘/백준

[Python] 백준 파이썬 25501 재귀의 귀재

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

 

25501번: 재귀의 귀재

각 테스트케이스마다, isPalindrome 함수의 반환값과 recursion 함수의 호출 횟수를 한 줄에 공백으로 구분하여 출력한다.

www.acmicpc.net

# 백준 25501 재귀의 귀재

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

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

t = int(input())
for i in range(t):
  s = input()
  answer = list(isPalindrome(s))
  print(answer[0], answer[1])

단순하게 생각해서 recursion 함수를 호출 할 때마다 $l$이 1씩 커지니까 마지막 $l$값이 호출 횟수라고 볼 수 있겠다 싶어서 

함숫값을 return할 때 $l$+1을 return받았습니다. 그랬더니 통과했습니다.

 

다른 방법으로는 직접 수를세는 방법이었는데

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

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

t = int(input())
for i in range(t):
  s = input()
  cnt = 0
  answer = isPalindrome(s)
  print(answer[0], answer[1])

cnt = 0 이라고 변수 할당하고

함수에서 로컬이 아닌 global 변수를 받기 위해 global cnt로 함수 내에서 사용할 수 있게 해줬습니다.