백준 자바 17478 재귀함수가 뭔가요?

김재동·2024년 7월 9일
0

문제

목록 보기
2/16


이 문제는 처음엔 약간 뭔소린가 싶었다.
n번 반복하는데 확실하게 반복하는거도 아니고 뭐지.. 싶었는데
마우스로 드래그하면서 블럭을 나누다보니 반복되는 부분이 눈에보였다.

package test11;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Ox11_Q2_1 {
	static StringBuilder sb;
	static int count = 0;
	static String space = "";
	// 백준 17478 S5 재귀함수가_뭔가요?
	public static void main(String [] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		sb = new StringBuilder();
		int n = Integer.parseInt(br.readLine());
		br.close();
		sb.append("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.\n");
		// 증가하는 부분 재귀함수 실행
		returnPlus(n);
		
		// 중간 멘트 두 개 추가
		String sentence5 = '"' + "재귀함수가 뭔가요?" + '"' + "\n";
		String sentence6 = '"' +"재귀함수는 자기 자신을 호출하는 함수라네"+ '"' + "\n";
		sb.append(space + sentence5);
		sb.append(space + sentence6);
		
		String sentence7 = "라고 답변하였지.\n";
		for(int i =n; i>-1; i--) {
			sb.append(space + sentence7);
			
			// 출력할 때마다 언더바('_') 4개씩 줄어들게끔
			if(space.length()>3) {
				space = space.substring(0, space.length()-4);
			}
		}	
		System.out.println(sb);
	}
	public static void returnPlus(int n) {
		while(true) {
			if(count==n) {
				break;
			}
			// 증가하는 문장
			String sentence1 = '"' + "재귀함수가 뭔가요?" + '"' + "\n";
			String sentence2 = '"' +"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.\n";
			String sentence3 = "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.\n";
			String sentence4 = "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어." + '"' + "\n";
			
			sb.append(space + sentence1);
			sb.append(space + sentence2);
			sb.append(space + sentence3);
			sb.append(space + sentence4);
			
			// 언더바 4개
			space += "____";
			count++;
		
			returnPlus(n);
		} // while fin
	
	}

}

우선 이 문제는 크게 세 가지 구간으로 나뉜다고 해석했다.
1. 질문 + 대답으로 이루어져 n번 반복하면서 증가하는 구간
2. 질문 + 대답으로 이루어져 1번만 출력하는 구간
3. 대답으로 이루어져 n+1번 반복하면서 감소하는 구간

이렇게 세 구간으로 인지했다.

그 과정에서 증가, 감소하면서 문장의 앞부분에 언더바 '_' 가 추가 및 제거 되므로
해당부분을 고려하면 쉽게 해결할 수 있을 것이라고 생각했다.

returnPlus()함수는 n번 반복하므로 반복할 횟수 n을 인자로 받는다.
이후 최종 출력할 sb에 반복해서 추가해주는데, 먼저 문장을 추가한 후
언더바들을 저장할 space에 4칸을 추가해준다.

이후 main부분에서 한 번만 추가되는 문장들과 n+1번 반복하지만 space가 점차 감소하여 추가되는 문장들을
고려해주면서 해당 문제를 마무리하였다.

굿

profile
성장중

0개의 댓글