백준 17478 (Java, C++) 재귀함수가 뭔가요?
728x90
SMALL

재귀함수로, ___를 두가지 방식으로 해결할 수 있다.

 

 

재귀 횟수를 세는 n, 그리고 ___ 을 세는 cnt가 있다

 

재귀 횟수는 n번으로 n이 1보다 작거나 같으면 종료해야한다.

cnt는 ___을 세기 위함이다. n을 감소시켰기 때문에 증가하는 변수인 cnt를 0으로 초기화하였다.

cnt는 맨 처음 컴공과 학생이 교수에게 하는 말인 "재귀함수가 뭔가요./ " 앞에는 없으므로 0이 초깃값이다.

 

 

(사실 종료 조건을 n으로 둔 다음 인자에 cnt만 두고 cnt를 증가시켜 종료 조건을 달면 함수 파라미터 수가 하나 줄어서 깔끔했을 것 같다) 

 

 

코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.println("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.");
        sol(n+1, 0);
    }

    private static void sol(int n, int cnt) {
        if (n <= 1) {
            for (int i = 0; i < cnt; i++) {
                System.out.print("____");
            }
            System.out.println("\"재귀함수가 뭔가요?\"");
            for (int i = 0; i < cnt; i++) {
                System.out.print("____");
            }
            System.out.println("\"재귀함수는 자기 자신을 호출하는 함수라네\"");
            for (int i = 0; i < cnt; i++) {
                System.out.print("____");
            }
            System.out.println("라고 답변하였지.");
            return;
        }
        for (int i = 0; i < cnt; i++) {
            System.out.print("____");
        }
        System.out.println("\"재귀함수가 뭔가요?\"");
        for (int i = 0; i < cnt; i++) {
            System.out.print("____");
        }
        System.out.println("\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.");
        for (int i = 0; i < cnt; i++) {
            System.out.print("____");
        }
        System.out.println("마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.");
        for (int i = 0; i < cnt; i++) {
            System.out.print("____");
        }
        System.out.println("그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"");
        sol(n-1, cnt + 1);
        for (int i = 0; i < cnt; i++) {
            System.out.print("____");
        }
        System.out.println("라고 답변하였지.");

    }

}

 

코드 (C++)

#include <iostream>

using namespace std;

void sol(int n, string str){

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

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int n;
    cin >> n;
    cout << "어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다." << '\n';
    sol(n, "");
    return 0;
}
728x90
LIST

'PS > BOJ' 카테고리의 다른 글

백준 2578 (Java) 빙고  (0) 2023.02.09
백준 3584 (Java) 가장 가까운 공통 조상  (0) 2023.02.07
백준 12851 (C++) 숨바꼭질  (2) 2023.01.30
백준 3184 (python) 양  (3) 2022.09.01
백준 1389 (python) 케빈 베이컨의 6단계 법칙  (2) 2022.08.29