문제 풀이 및 개발 공간

[백준] 17478번 재귀함수가 뭔가요? 문제! (silver 5 본문

백준공부/java

[백준] 17478번 재귀함수가 뭔가요? 문제! (silver 5

gomduri43 2022. 7. 22. 19:29

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

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

//문장 똑같이 입력, -가 아닌 _입력 등을 해야되는데 자세히 살펴보지 않다보니 까다롭게 느껴졌다.

 

위와같이 출력을 할 경우 백준에서 160ms가 뜬다. 

이때 출력을 bufferedwriter로 바꾸면 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

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

 위와 같이 되는데 이때 148ms가 걸린다. 

bufferedwriter로 출력을 할 때 주의사항은 bw.writer를 하고서, bw.flush()를 통해 계속 버퍼를  비워낸다.