본문 바로가기
백준

[백준/Python] 17478 재귀함수가 뭔가요?

by 보먀 2024. 7. 16.
728x90
반응형

문제: https://www.acmicpc.net/problem/17478

 

 

사용 알고리즘: 재귀

 

 

(난 정말 재귀가 싫어 엉엉ㅜㅜ)

아아 알겠다 -> 어..? -> 아 진짜 알겠다 -> 어..? ㅜㅜ

무한 반복했던 문제.. 사실 모든 ps 를 못하지만, 재귀는 더더 헷갈리고 어렵게 느껴진다

하지만 어쩌겠어.. 이거 못하면 dfs 도 몬해.. 연습만이 살길..

 

입력이 2일 때의 출력

어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.
"재귀함수가 뭔가요?" "잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
____"재귀함수가 뭔가요?"
____"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
____마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
____그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
________"재귀함수가 뭔가요?"
________"재귀함수는 자기 자신을 호출하는 함수라네"
________라고 답변하였지.
____라고 답변하였지.
라고 답변하였지.

 

 

"재귀함수가 뭔가요?" 가 반복되다가 3번째 나왔을 때 재귀 탈출

-> 아하 베이스케이스는 입력한 N 이 되겠구나

-> 반복되는 부분을 출력하고 다시 함수를 불러 재귀를 실행시켜야겠다

-> 라고 답변하였다. 는 재귀 호출이 끝나고 돌아왔을 때 출력되도록 하면 되겠다

 

 

전체 코드

N = int(input())

def printing(num):
    answer = [
        "\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.",
        "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.",
        "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\""
    ]
    for i in range(3):
        print(("____" * num) + answer[i])

def rec(n, cur):
    print(("____" * cur) + "\"재귀함수가 뭔가요?\"")
    if cur == n: # 베이스 케이스
        print(("____" * cur) + "\"재귀함수는 자기 자신을 호출하는 함수라네\"")
    else:
        printing(cur)
        rec(n, cur+1) # 재귀 호출
    print(("____" * cur) + "라고 답변하였지.")
print("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.")
rec(N, 0)
728x90
반응형