백준 17478 재귀함수가 뭔가요
{% embed url=“https://www.acmicpc.net/problem/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); }}
Java
복사