실버 5
재귀
https://www.acmicpc.net/problem/17478
재귀함수를 이용한 문제이다.
재귀함수란 자기자신을 호출하는 함수를 말한다.
기본적인 구조
1. 함수 내에 동일한 함수가 존재한다.
2. 종료조건이 있어야 한다.
예시)
public class PlusFunction {
public static void main(String[] args) {
HelloWorld(5); // HelloWorld 출력 메서드 호출
} // HelloWorld 출력 메서드 선언
public static void HelloWorld(int n) {
// n이 0인 경우 return
if(n == 0) return;
System.out.println("HelloWorld"); // HelloWorld 출력
HelloWorld(n-1); // 재귀함수 시작
}
}
이 문제에서도 위와 같은 조건을 충족시키는 재귀함수를 설계하면 된다.
package 기타;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BOJ17478 {
static int n;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
System.out.println("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.");
recur(0, "");
}
public static void recur(int depth, String under) {
// String under = "";
// for (int i = 1; i <= depth; i++) {
// under += "____";
// }
if (depth == n) {
System.out.println(under + "\"재귀함수가 뭔가요?\"");
System.out.println(under + "\"재귀함수는 자기 자신을 호출하는 함수라네\"");
System.out.println(under + "라고 답변하였지.");
return;
}
System.out.println(under + "\"재귀함수가 뭔가요?\"");
System.out.println(under + "\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.");
System.out.println(under + "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.");
System.out.println(under + "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"");
recur(depth + 1, under + "____");
System.out.println(under + "라고 답변하였지.");
}
}
원래는 under를 반복문으로 매번 구해줬지만 파라미터로 넘겨서 사용하는게 효율적일 것 같아 리팩토링했다.