공부하기/백준

[Java] 백준 풀기 17478 - 재귀함수가 뭔가요?

XEV 2023. 1. 16. 23:14

자바 백준 17478번

실버 5

https://www.acmicpc.net/problem/17478

 

17478번: 재귀함수가 뭔가요?

평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다. 매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 구현, 재귀

 

 

 

 

 

문제 풀기

base case 및 recursive case 조건을 인지하여 구현한다.

base case 는 재귀함수가 끝나는 지점이며, return 을 하여 이전에 지속적으로 누적된 함수들을 되짚어 돌아간다.

 

 

재귀함수와 관련없는 첫 줄

어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.

를 시작으로..

 

 

recursive case 가 되는,

"재귀함수가 뭔가요?"
"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."

라고 답변하였지.

문장이 들어오고 그 사이에 자신의 함수 myRecursion(n - 1, count + 1); 가 불려진다.

 

 

base case 가 되는 문장은

"재귀함수가 뭔가요?"
"재귀함수는 자기 자신을 호출하는 함수라네"
라고 답변하였지.

이고 마지막 출력과 함께 return 되어 지금까지 지나온 함수들로 되돌아간다.

 

 

그리고 네 개의 under bar "____" 를 재귀함수 시작할때마다 앞에 추가적으로 출력이 이루어져야 하기 때문에 count 변수와 System.out.print("____".repeat(count)); 를 통해 적용해준다.

 

 

 

 

 

코드 보기

// 재귀함수가 뭔가요?
// package boj_17478;

import java.util.Scanner;

public class Main {

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


}