[Java] 백준 - 17478번 재귀함수가 뭔가요? (Silver V)

배똥회장·2022년 7월 26일
0
post-custom-banner

📝 문제

백준 - 17478번 : 재귀함수가 뭔가요?


📝 답안

📌 작성 코드

import java.io.*;

public class Main {	
	
	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 count = Integer.parseInt(br.readLine());

		func(bw, count, 0);
		
		bw.flush();
		bw.close();
	}
	
	public static void func(BufferedWriter bw, int n, int count) throws IOException {
		if (count > n) return;
		
		String hyphen = "_".repeat(count * 4);
		if (count == 0) bw.write("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.\n");
		
		bw.write(hyphen + "\"재귀함수가 뭔가요?\"\n");
		
		if (count == n) {
			bw.write(hyphen + "\"재귀함수는 자기 자신을 호출하는 함수라네\"\n");
		} else {
			bw.write(hyphen + "\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.\n");
			bw.write(hyphen + "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.\n");
			bw.write(hyphen + "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"\n");
		}
		
		func(bw, n, count+1);
		
		bw.write(hyphen + "라고 답변하였지.\n");
	}
}

📌 결과


📌 코드 풀이

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
  • BufferedReader는 입력 값을 한 줄씩 받아오는 객체
  • BufferedWriter는 출력 값을 모아서 내보내는 객체
int count = Integer.parseInt(br.readLine());
  • int형으로 변환하면서 입력 값 한 줄을 읽어오고, 그것을 count 변수에 넣는 과정
func(bw, count, 0);
  • 재귀함수 호출 시작
  • func 함수의 매개 변수 의미
    -bw : 말 그대로 출력 값을 담을 BufferedWriter 객체
    -count : 반복해야 할 숫자(입력 값)
    -0 : 반복한 횟수
public static void func(BufferedWriter bw, int n, int count) throws IOException {
	if (count > n) return;
		-- 중략 -- 
}
  • 만약 반복한 횟수가 반복해야할 숫자보다 크면 return. 함수를 바로 종료한다는 뜻
String hyphen = "_".repeat(count * 4);
  • 반복 횟수에 따라 언더바( _ )가 4개씩 추가되는 것을 볼 수 있기 때문에 repeat() 함수로 문자열 만들기
if (count == 0) bw.write("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.\n");
  • 처음에만 출력되기 때문에 if문으로 조건을 작성함
bw.write(hyphen + "\"재귀함수가 뭔가요?\"\n");
  • 항상 출력되기 때문에 if문 없이 입력
if (count == n) {
	bw.write(hyphen + "\"재귀함수는 자기 자신을 호출하는 함수라네\"\n");
} else {
	bw.write(hyphen + "\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.\n");
	bw.write(hyphen + "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.\n");
	bw.write(hyphen + "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"\n");
}
  • 마지막 반복 횟수일 때는 다른 출력 값을 요구하기 때문에 if문 추가
  • "는 그냥 입력하면 출력이 되지 않기 때문에 \"으로 작성해야 함
func(bw, n, count+1);
 bw.write(hyphen + "라고 답변하였지.\n");
  • 문제를 보면 "라고 답변하였지." 이전에 또 함수가 호출되어 반복을 마무리한 후에 출력이 되기 때문에 func함수를 먼저 호출 후 출력
bw.flush();
bw.close();
  • bw.flush()를 작성해야 출력이 되므로 필수 코드임
  • bw.close()는 bw를 종료하는 메소드이기 때문에 선택 코드

📝 후기

음... 좀 더 괜찮게 작성하는 방법이 있을려나... 일단 내 실력은 이 정도가 최대인듯...

profile
어쩌면 개발자
post-custom-banner

0개의 댓글