백준 17478 재귀함수가 뭔가요
Solution 1. 재귀
package practice.algorithm.recursion;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* https://www.acmicpc.net/problem/17478
* 15500 kb / 168 ms
* 재귀함수가 뭔가요?
* - 출력 답안을 보면 답변을 감싸고 있는 함수가 반복 호출되는 모양새이다. 출력 문구 내부에 재귀함수로 호출해주어 순환 호출하도록 구성하였다.
* - 또한 출력시 indent 가 적용되어있는 것을 볼 수 있는데, 각 depth 마다 4개씩 늘어나는 규칙을 발견하여 이 역시 재귀함수로 호출하여 연산할 수 있도록 하였다. (반복문 보다 코드가 깔끔할 것으로 생각했다.)
* */
public class Bj17478 {
private static final String QUESTION = "\"재귀함수가 뭔가요?\"";
private static final String EXPLANATION_1 = "\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.";
private static final String EXPLANATION_2 = "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.";
private static final String EXPLANATION_3 = "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"";
private static final String ANSWER = "라고 답변하였지.";
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
print(n);
}
private static void print(int n) {
System.out.println("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.");
answer(n, 0);
}
private static void answer(int n, int indent) {
if (n == 0) {
System.out.println(getIndent(indent) + QUESTION);
System.out.println(getIndent(indent) + "\"재귀함수는 자기 자신을 호출하는 함수라네\"");
System.out.println(getIndent(indent) + ANSWER);
return;
}
System.out.println(getIndent(indent) + QUESTION);
System.out.println(getIndent(indent) + EXPLANATION_1);
System.out.println(getIndent(indent) + EXPLANATION_2);
System.out.println(getIndent(indent) + EXPLANATION_3);
answer(n-1, indent + 1);
System.out.println(getIndent(indent) + ANSWER);
}
private static String getIndent(int index) {
if (index == 0) {
return "";
}
return "____" + getIndent(index-1);
}
}
Last updated