[백준] 17478번 재귀함수가 뭔가요? - Java, 자바

Kim Ji Eun·2022년 5월 9일
0

난이도

실버 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를 반복문으로 매번 구해줬지만 파라미터로 넘겨서 사용하는게 효율적일 것 같아 리팩토링했다.

profile
Back-End Developer

0개의 댓글