[백준] 17478번 : 재귀함수가 뭔가요? (파이썬)

뚝딱이 공학도·2022년 3월 5일
0

문제풀이_백준

목록 보기
78/159



문제



나의 답안

def recur(s,cnt, n):
    print(s*cnt+'"재귀함수가 뭔가요?"')
    
    if cnt==n:
        print(s*cnt+'"재귀함수는 자기 자신을 호출하는 함수라네"')

    else:
        print(s*cnt+'"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.')
        print(s*cnt+"마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.")
        print(s*cnt+'그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."')
        recur('____',cnt+1,n)
    print(s*cnt+"라고 답변하였지.")

n=int(input())
cnt=0
s='____'
print(s*cnt+"어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.")
recur(s,cnt,n)

접근방법

  • 어려운 문제라기 보단 따옴표 등 출력 형식에 신경 쓸 게 있어서 꼼꼼히 살펴보아야 하는 문제이다.
  • 증가하는 '____' 을 제외하고 나머지 문자열은 똑같이 출력되므로 증가하는 해당 부분만 변화시켜주면 된다.
  • 밑줄친 부분은 입력 수와 상관없이 한번만 출력된다.
  • 큰 따옴표를 출력하기 위해서는 '"문자열"'와 같이 사용한다.

  1. 재귀함수를 정의해준다. 함수의 인자로는 s('____'), cnt(s에 곱할 수), n(반복 횟수)가 들어간다.
    2. '"재귀함수가 뭔가요?"' 라는 문장은 마지막까지 매번 반복되므로 함수의 첫 부분에서 출력해준다.
    3. 이후 cnt과 n이 같아지면 마지막이라는 뜻이므로, print(s*cnt+'"재귀함수는 자기 자신을 호출하는 함수라네"') 를 출력해준다. 이때, 언더바*cnt를 해주어야 횟수만큼 출력할 수 있다.

    1. 마지막 전까지는 나머지 문장을 출력해주어야 한다. 따라서 else로 s*cnt+"라고 답변하였지."를 제외한나머지를 출력해준다. 그리고 recur함수를 재귀 호출한다.
    2. print(s*cnt+"라고 답변하였지.")라는 문장은 맨 마지막에 호출되므로 재귀함수를 호출하고 난 후에 출력해준다.

    6."어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다."라는 문장은 가장 처음에 딱 1번 호출되므로 재귀함수 호출 전에 출력해준다.

0개의 댓글