
내가 생각했을때 문제에서 원하는부분
교수님이 출력을 원하는 재귀 횟수 N(1 ≤ N ≤ 50)이 주어진다.
출력 예시를 보고 재귀 횟수에 따른 챗봇의 응답을 출력한다.
내가 이 문제를 보고 생각해본 부분
main 메서드에서 입력을 받고, 인삿말을 먼저 출력한다.
recursivePrint 메서드는 현재 재귀 깊이(depth)를 받아 그 깊이에 맞는 들여쓰기(4칸씩)를 계산한다.
각 깊이마다 "재귀함수가 뭔가요?"라는 질문을 출력하고,
깊이가 최대 N이면 재귀함수에 대한 설명을 직접 출력 후 돌아간다.
최대 깊이가 아니라면 이야기 본문을 출력하고, 재귀적으로 다음 깊이 호출한다.
재귀 호출이 끝나고 돌아오면 "라고 답변하였지."를 깊이에 맞게 출력하여 재귀형 응답을 완성한다.
이렇게 하면 문제의 출력 예시처럼 재귀의 깊이에 따라 들여쓰기가 증가하고, 깊이 N에서 답변을 한 뒤 거꾸로 돌아가며 마무리 출력이 이루어진다.
코드로 구현
package baekjoon.baekjoon_33;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 17478번 문제
public class Main1319 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
System.out.println("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.");
recursivePrint(N, 0);
br.close();
}
private static void recursivePrint(int N, int depth) {
String indent = "____".repeat(depth);
System.out.println(indent + "\"재귀함수가 뭔가요?\"");
if (depth == N) {
System.out.println(indent + "\"재귀함수는 자기 자신을 호출하는 함수라네\"");
} else {
System.out.println(indent + "\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.");
System.out.println(indent + "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.");
System.out.println(indent + "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"");
recursivePrint(N, depth + 1);
}
System.out.println(indent + "라고 답변하였지.");
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.