
가. 문제 설명
재귀를 사용하여 올바른 출력을 만드는 구현 문제이다.
나. 접근 방법
재귀 스택을 그려서 원하는 곳에 입출력이 이루어지게 코드를 작성하였다.
다. 사용할 알고리즘 선택
재귀 알고리즘
가. Count를 하여 원하는 지점에서 종료
재귀함수는 자기 자신을 호출하는 함수라네
위의 텍스트를 출력하게 해야한다.
if (cnt == n) {
System.out.println("____".repeat(cnt) + "\"재귀함수는 자기 자신을 호출하는 함수라네\"");
System.out.println("____".repeat(cnt) + "라고 답변하였지.");
return;
}
나. 호출별 출력 상이
재귀함수 호출과 종료별로 문자열이 앞에 출력되고 뒤에 출력되는 것을 생각하여 재귀 함수 선언부 앞 뒤에 해당 문자열 출력을 배치한다.
전체코드 참고
import java.util.*;
import java.io.*;
import java.lang.*;
public class P17478 {
public static void gogo(int n, int cnt) {
System.out.println("____".repeat(cnt) + "\"재귀함수가 뭔가요?\"");
if (cnt == n) {
System.out.println("____".repeat(cnt) + "\"재귀함수는 자기 자신을 호출하는 함수라네\"");
System.out.println("____".repeat(cnt) + "라고 답변하였지.");
return;
}
System.out.println("____".repeat(cnt) + "\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.");
System.out.println("____".repeat(cnt) + "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.");
System.out.println("____".repeat(cnt) + "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"");
gogo(n, cnt + 1);
System.out.println("____".repeat(cnt) + "라고 답변하였지.");
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int N;
N = sc.nextInt();
System.out.println("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.");
gogo(N, 0);
}
}
재귀 스택을 그리면 간단히 풀리는 문제이다. 역시 손으로 직접 뭐든지 다 풀어봐야 한다.