[baekjoon] 25501

윤동환·2023년 1월 29일
0

Algorithm

목록 보기
45/54
post-thumbnail

재귀의 귀재

주어진 문자열이 팰린드롬인지 구별하는 문제이다.
팰린드롬이란 문자열을 앞에서부터 읽어도 뒤에서부터 읽어도 똑같은 문자열을 의미한다.
재밌는 부분은 문제의 제목인 재귀의 귀재 또한 팰린드롬이라는 것이다.

성공한 코드

import sys
input=sys.stdin.readline

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

N = int(input())
arr = []
for i in range(N):
    s = input().rstrip()
    a = [0]
    print(recursion(s, 0, len(s) - 1, a), a[0])

문제 해결 포인트

팰린드롬을 식별하기 위한 기본 return값을 제외하고 몇번 호출되었는지 식별 가능한 코드를 구현해야한다.

  • call by reference타입의 변수를 두어 호출시마다 1 증가하도록하여 main문에서 식별 가능하도록 하였다.

    python은 call by assignment이다.
    python의 경우는 위의 경우처럼 주소 값 참조나, 값 복사와 조금 다르다.
    이유는 python은 모든 것을 "객체"로 판단한다는 데에 있다.
    즉, int 변수나 list객체 li = [0]을 그대로 받더라도 함수내 li는 이미 지역변수로 처리되어 함수 내에서 li에 [1]를 binding하더라도 함수 호출이 끝나면 전역 li는 값이 바뀌지 않는다.
    하지만, 함수 내 지역변수 li의 인덱스로 객체 내 요소를 직접 조작하게 되면 객체 자체가 변한다.
    ex) li[0] = 1

  • input=sys.stdin.readline로 input값을 받게되면 개행 문자가 포함되어 값을 받게된다.
    strip() 함수는 문자열 내에 공백을 제거해주며 rrstrip은 오른쪽의 공백을 제거해준다.
    이 함수를 사용하지 않고 readline으로 값을 받으면 s의 길이가 1씩 더해져서 출력되니 주의해야한다.

결과

참고 블로그

profile
모르면 공부하고 알게되면 공유하는 개발자

0개의 댓글