1. 문제

www.acmicpc.net/problem/17478

 

17478번: 재귀함수가 뭔가요?

평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다. 매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대

www.acmicpc.net

2. 접근방법

재귀함수를 처음 접할 때 풀면 좋을 것 같은 문제

 

컴공에서는 꽤 유명한 밈? 같이 돌았던 이야기인데

문제에서 만나서 반가웠다.

 

"재귀함수가 뭔가요?"

"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.

마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.

그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."

 

이 4문장이 계속해서 반복 하는데

 

반복 때마다 _ 가 4개씩 추가 된다.

또 함수에서 빠져나온뒤 출력하는

라고 답변하였지 도 있다.

 

기저조건은 반복횟수 == N  인 경우이고 이때만 기존 문장과 조금 다른 문장이 들어간다.

 

N 으로 2가 들어온경우

0회전 때 ____ * 0 에 

문장 반복

1회전 때 ____ * 1 에

문장 반복

2회전 때 ____ * 2 에

조금 다른 문장

 

2회전 + 라고 답변하였지

1회전 + 라고 답변하였지

0회전 + 라고 답변하였지

 

가 된다.

 

3. 파이썬 코드

N = int(input())
a = []
S = '어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.\n'
a.append('"재귀함수가 뭔가요?"\n')
a.append('"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.\n')
a.append('마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.\n')
a.append('그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."\n')
a.append('라고 답변하였지.\n')
def recur(n):
    global S
    if n == N:
        S += "____" * n
        S += a[0]
        S += "____" * n
        S += '"재귀함수는 자기 자신을 호출하는 함수라네"\n'
    else:
        for i in range(4):
            S += "____" * n
            S += a[i]
        recur(n+1)
    S += "____" * n
    S += a[4]
recur(0)
print(S)

4. 마치며

파이썬으로 알고리즘 기본 개념들부터 풀어보고 있는데

확실히 아직 익숙치가 않아서 코드를 짜는게 어색해 죽겠다..

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준] 14725 개미굴  (1) 2021.02.26
[백준] 2447 별 찍기 - 10  (2) 2021.02.25
[백준] 1270 전쟁 - 땅따먹기  (0) 2021.02.23
[백준] 1016 제곱ㄴㄴ수  (0) 2021.02.13
[백준] 10825 국영수  (1) 2021.02.07

+ Recent posts