본문 바로가기

[BOJ] - JAVA

[백준] 17478 : 재귀함수가 뭔가요? JAVA 풀이

이 예제 출력을 보고 어떻게 구현할지 생각해봤다.

1. 메인함수에서 "어느 한~~"를 출력한다.

2. 재귀횟수 N을 입력받는다.

3. 재귀를 시작한다.

    3-1 재귀 종료 조건은 함수의 인자가 0일 때로 한다. (메인에서 입력받은 N부터 0까지 감소시키며 재귀)

    3-2 재귀를 할 때마다 문장 앞에 "____"의 개수가 배로 늘어나는데, 이는 전역변수에 저장해두고 재귀함수 속 변수에서 복사해서 사용한다. (따로 복사해서 사용하지 않으면 재귀종료조건을 만족하고 리턴될 때, 출력되는 "____"의 개수가 줄어들지 않는다.)

!!! 자바에서 "는 단독으로 출력할 수 없어서 \"라고 써줘야 한다.

import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
public class Main{
	public static String str = "";
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        System.out.println("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.");
        f(N);
        
    }
    public static void f(int n) {
    	String line = str;
    	
    	if(n==0) {
    		System.out.println(line + "\"재귀함수가 뭔가요?\"");
    		System.out.println(line + "\"재귀함수는 자기 자신을 호출하는 함수라네\"");
    		System.out.println(line + "라고 답변하였지.");    	
    		return;
    	}
    	System.out.println(line + "\"재귀함수가 뭔가요?\"");
    	System.out.println(line + "\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.");
    	System.out.println(line + "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.");
    	System.out.println(line + "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"");

    	str += "____";
    	f(n-1);
    
		System.out.println(line + "라고 답변하였지.");    

    }
}