본문 바로가기
Algorithm

(BOJ) 17478 풀이

by snwo 2022. 2. 22.
#include<bits/stdc++.h>

int N;
using namespace std;
void underbar(int x){
    for(int i=0;i<(N-x);i++){
        cout << "____";
    }
}
void func(int c){
    underbar(c);
    cout << "\"재귀함수가 뭔가요?\"\n";
    if(c==0){
        underbar(c);
        cout << "\"재귀함수는 자기 자신을 호출하는 함수라네\"" << '\n';
    }else{
        underbar(c);
        cout << "\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.\n";
        underbar(c);
        cout << "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.\n";
        underbar(c);
        cout << "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"\n";
        func(c-1);
    }
    underbar(c);
    cout << "라고 답변하였지.\n";
}
int main(void){
    ios::sync_with_stdio(0);cin.tie(0);
    cin >> N;
    cout << "어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.\n";
    func(N);
}

재귀함수 이해하기에 재밌는 문제였다.

입력을 정수 N 하나만 받아서, 예제출력을 분석해 코드를 짜야했다.

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

재귀함수를 이용해서 풀 때,

어느 한 컴퓨터공학과 ~ 이 문장은 main 에서 출력해줘야 한다.

 

함수 원형 : void func(int c)

base condition : c==0 일 때, “재귀함수는 자기 자신을 호출하는 함수라네” 를 출력해준다."

이외에는 잘 들어보게 ~~ 를 출력해야한다.

 

재귀함수 호출 후에는 라고 답변하였지. 를 출력한다.

언더바를 출력해주는 함수를 따로 만들었는데,

N==2 일 때, 언더바의 갯수는 0,4,8 개 이다.

c 를 1씩 감소시키면서 호출하니까, 언더바 4개를 $N-c$ 번 호출하면 된다.