


이 문제는 처음엔 약간 뭔소린가 싶었다.
n번 반복하는데 확실하게 반복하는거도 아니고 뭐지.. 싶었는데
마우스로 드래그하면서 블럭을 나누다보니 반복되는 부분이 눈에보였다.
package test11;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Ox11_Q2_1 {
static StringBuilder sb;
static int count = 0;
static String space = "";
// 백준 17478 S5 재귀함수가_뭔가요?
public static void main(String [] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
br.close();
sb.append("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.\n");
// 증가하는 부분 재귀함수 실행
returnPlus(n);
// 중간 멘트 두 개 추가
String sentence5 = '"' + "재귀함수가 뭔가요?" + '"' + "\n";
String sentence6 = '"' +"재귀함수는 자기 자신을 호출하는 함수라네"+ '"' + "\n";
sb.append(space + sentence5);
sb.append(space + sentence6);
String sentence7 = "라고 답변하였지.\n";
for(int i =n; i>-1; i--) {
sb.append(space + sentence7);
// 출력할 때마다 언더바('_') 4개씩 줄어들게끔
if(space.length()>3) {
space = space.substring(0, space.length()-4);
}
}
System.out.println(sb);
}
public static void returnPlus(int n) {
while(true) {
if(count==n) {
break;
}
// 증가하는 문장
String sentence1 = '"' + "재귀함수가 뭔가요?" + '"' + "\n";
String sentence2 = '"' +"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.\n";
String sentence3 = "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.\n";
String sentence4 = "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어." + '"' + "\n";
sb.append(space + sentence1);
sb.append(space + sentence2);
sb.append(space + sentence3);
sb.append(space + sentence4);
// 언더바 4개
space += "____";
count++;
returnPlus(n);
} // while fin
}
}
우선 이 문제는 크게 세 가지 구간으로 나뉜다고 해석했다.
1. 질문 + 대답으로 이루어져 n번 반복하면서 증가하는 구간
2. 질문 + 대답으로 이루어져 1번만 출력하는 구간
3. 대답으로 이루어져 n+1번 반복하면서 감소하는 구간
이렇게 세 구간으로 인지했다.
그 과정에서 증가, 감소하면서 문장의 앞부분에 언더바 '_' 가 추가 및 제거 되므로
해당부분을 고려하면 쉽게 해결할 수 있을 것이라고 생각했다.
returnPlus()함수는 n번 반복하므로 반복할 횟수 n을 인자로 받는다.
이후 최종 출력할 sb에 반복해서 추가해주는데, 먼저 문장을 추가한 후
언더바들을 저장할 space에 4칸을 추가해준다.
이후 main부분에서 한 번만 추가되는 문장들과 n+1번 반복하지만 space가 점차 감소하여 추가되는 문장들을
고려해주면서 해당 문제를 마무리하였다.

굿