본문 바로가기
온라인 저지/BOJ

[BOJ/Java] 17478 재귀함수가 뭔가요?

by ahj 2022. 2. 3.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BOJ17478 {
	static StringBuilder ans = new StringBuilder();

	public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(in.readLine());
		ans.append("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.\n");
		re(n, "");
		System.out.println(ans);
	}

	private static void re(int n, String underBar) {
		ans.append(underBar).append("\"재귀함수가 뭔가요?\"\n");
		if (n == 0) {
			ans.append(underBar).append("\"재귀함수는 자기 자신을 호출하는 함수라네\"\n");
		} else {
			ans.append(underBar).append("\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.\n").append(underBar)
					.append("마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.\n").append(underBar)
					.append("그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"\n");
			re(n - 1, underBar + "____");
		}
		ans.append(underBar).append("라고 답변하였지.\n");
	}
}

// 출력
// 4

// 출력
//어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.
//"재귀함수가 뭔가요?"
//"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
//마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
//그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
//____"재귀함수가 뭔가요?"
//____"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
//____마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
//____그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
//________"재귀함수가 뭔가요?"
//________"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
//________마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
//________그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
//____________"재귀함수가 뭔가요?"
//____________"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
//____________마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
//____________그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
//________________"재귀함수가 뭔가요?"
//________________"재귀함수는 자기 자신을 호출하는 함수라네"
//________________라고 답변하였지.
//____________라고 답변하였지.
//________라고 답변하였지.
//____라고 답변하였지.
//라고 답변하였지.

Java로 코딩테스트 준비도 하고 재귀도 연습할 겸 BufferedReader도 활용하고 StringBuilder도 활용해서 가볍게 해보았다. 재귀에 어울리지 않게 노가다로 구현해서 해결했다가 좋은 풀이들을 참고해서 append도 활용해봤다.

 

출력은 어려운 일이 아니었지만 underBar를 처리하는 게 아이디어가 떠오르지 않아서 까다로웠다. 처음 풀이는 for문을 매번 추가하고 depth를 설정해서 붙여주는 것으로 처리했으나 underBar도 변수 처리한 풀이를 보고 재귀가 가진 간결함의 장점을 살리기 위해 따라해봤다.

 

재귀에서 중요한 조합, 순열, 부분 집합까지 잘 공부해보자

'온라인 저지 > BOJ' 카테고리의 다른 글

[BOJ/Java] 1966 프린터 큐  (0) 2022.02.09
[BOJ/Java] 1991 트리 순회  (0) 2022.02.06
[BOJ/Node.js] 1786 찾기  (0) 2022.01.30
[BOJ/Java] 2309 일곱 난쟁이  (0) 2022.01.23
[BOJ/Python] 16926 배열 돌리기 1  (0) 2022.01.19

댓글