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

letsbebrave·2022년 4월 2일
0

codingtest

목록 보기
67/146
post-thumbnail

문제

풀이 1.

ub = ""
global a
a = 0
def first(t, a):
    print("____" * a + '\"재귀함수가 뭔가요?\"')
    print("____" * a + '\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.')
    print("____" * a + '마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.')
    print("____" * a + '그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"')


    if a == t-1:
        print("____" * (a+1) + '\"재귀함수가 뭔가요?\"')
        print("____" * (a+1) + '\"재귀함수는 자기 자신을 호출하는 함수라네\"')
        print("____" * (a+1) + "라고 답변하였지.")

    else:
        first(t, a+1)

def end(t):
    if t == 0: # t가 하나씩 감소해서 0이 될때
        return print("라고 답변하였지.")
    else:
        print("____" * t + "라고 답변하였지.")
        end(t-1)

t = int(input())
print("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.")
first(t, a)
end(t-1)

맞긴 맞았으나, 풀이가 좀 너무 길고 복잡한 측면이 있어서 global 변수 없이 재귀만으로 풀 수 있는 방법을 찾아보았다.

다른 사람 풀이

n = int(input()) 
def recur(i, n): 
	print("____"*i + '"재귀함수가 뭔가요?"') 
	if i == n: # 하나씩 더해준 i값이 n과 같을 때
		print("____"*i + '"재귀함수는 자기 자신을 호출하는 함수라네"')
	else: # 하나씩 더해준 i값이 n과 같지 않을 때
		print("____"*i + '"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.') 
		print("____"*i + "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.") 
		print("____"*i + '그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."') 
		recur(i+1, n) # 매개변수 0으로 받은 값을 하나씩 더해줌
	print("____"*i + "라고 답변하였지.") # i가 n과 같을 때 실행됨 (잘 이해 안되는 부분)

print("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.") 
recur(0, n) # 따로 global 변수를 주지 않고 매개변수 0을 그냥 줌! => i를 0부터 시작

스스로 풀어본 풀이

import sys
n = int(sys.stdin.readline())

print("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.")

def first(k):
    if k == n:
        print(k*"____" + '"재귀함수가 뭔가요?"')
        print(k*"____" + '"재귀함수는 자기 자신을 호출하는 함수라네"')
        print(k*"____" + '라고 답변하였지.')
        second(k-1)
        return
    
    print(k*"____" + '"재귀함수가 뭔가요?"')
    print(k*"____" + '"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.')
    print(k*"____" + '마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.')
    print(k*"____" + '그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."')
    
    first(k+1)

def second(k):
    if k == 0:
        print('라고 답변하였지.')
        return
    
    print(k*"____" + '라고 답변하였지.')
    
    second(k-1)

first(0)
profile
그게, 할 수 있다고 믿어야 해

0개의 댓글