[알고리즘/파이썬] 백준 17478 재귀함수가 뭔가요?

Song·2021년 7월 11일
0

알고리즘

목록 보기
17/22
post-custom-banner

문제링크

문제 설명

입력된 횟수 만큼 예제를 출력할 수 있는 재귀함수 구현하기

주제

  • 재귀함수

난이도

  • 실버 V

풀이

import sys

# 반복해서 출력되는 예제는 미리 배열에 담아준다.
arr = [
        '"재귀함수가 뭔가요?"',
        '"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.',
        '마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.',
        '그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."'
    ]

count = 0
def lecturer_says(a, count): 
    # 카운트 수가 증가할 때마다 '_' 를 4개씩 추가
    under_bar = '_' * (4 * count)
    # count 수와 input 값이 동일해진다면 재귀 함수를 종료 시키고 아래 값을 반환한다.
    if a == count:
        print(under_bar + '"재귀함수가 뭔가요?"')
        print(under_bar + '"재귀함수는 자기 자신을 호출하는 함수라네"')
        print(under_bar+ "라고 답변하였지.")
        return

    for i in arr:       
        print(under_bar + i)
    count += 1
   
    lecturer_says(a, count)
    # 재귀함수 리턴 후 순차적으로 출력되는 값
    print(under_bar+ "라고 답변하였지.")

a = int(sys.stdin.readline().rstrip())
print("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.")
lecturer_says(a, count)

풀이 방법

  1. 반복되서 출력되는 값을 미리 배열에 담아준다.
  2. 'count' 변수를 이용하여 '_' 개수와 재귀함수 종료 시점을 확인한다.
  3. 'count' 변수와 입력 값이 동일해지면 재귀함수를 리턴한다.

문제를 풀고 알게된 개념 및 소감

오늘 문제를 통해 내가 재귀함수에게 잘못된 고정관념이 있다는 것을 알 수 있었다.
바로 재귀함수는 꼭 return를 통해 자기 자신을 호출시킬 수 있다는 것.
하지만 return 없이도 본인을 호출할 수 있었고, 그렇게 해야만 나중에 함수가 리턴된 후에도 밑에 라인들이 실행될 수 있었다.

전에 공부했던 덕분에 전체적인 코드 구현은 나쁘지 않게 진행되었으나 return 이 놈을 포함시키면서 어떻게 다른 라인을 실행시킬 수 있는 지 고민하느라 애 좀 먹었다.

그래도 전에는 구현에서조차 애먹었을 거 같은 문제를 이번에는 구글에 의지하지 않고 풀었다는 게 매우 뿌듯하다..

profile
Learn From Yesterday, Live Today, Hope for Tomorrow
post-custom-banner

0개의 댓글