728x90
🔗 문제 링크
https://www.acmicpc.net/problem/17478
📌 문제 개요
재귀 호출의 실행 흐름을 이해하는 출력 문제
깊이에 따라 들여쓰기를 적용하며, 재귀 호출 구조를 그대로 문자열로 표현해야 한다.
📌 접근 방법
- 깊이를 나타내는
depth변수를 사용한다. depth마다 "____"를 반복 출력한다.depth == n이 되면 기저 답변을 출력한다.- 재귀 호출 후 복귀하면서 "라고 답변하였지."를 출력한다.
📌 핵심 아이디어
재귀 구조
jh(0) └ jh(1) └ jh(2) └ ...
- 내려갈 때 질문 출력
depth == n에서 실제 답변 출력- 돌아오면서 마무리 문장 출력
재귀 호출 스택의 실행 흐름을 그대로 출력
📌 전체 코드
package no_17478;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class No17478 {
static int n;
static StringBuilder sb;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
sb = new StringBuilder();
sb.append("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.\n");
jh(0);
System.out.print(sb);
}
static void jh(int depth) {
for (int i = 0; i < depth; i++) {
sb.append("____");
}
sb.append("\"재귀함수가 뭔가요?\"\n");
if (depth == n) {
for (int i = 0; i < depth; i++) {
sb.append("____");
}
sb.append("\"재귀함수는 자기 자신을 호출하는 함수라네\"\n");
} else {
for (int i = 0; i < depth; i++) {
sb.append("____");
}
sb.append("\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.\n");
for (int i = 0; i < depth; i++) {
sb.append("____");
}
sb.append("마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.\n");
for (int i = 0; i < depth; i++) {
sb.append("____");
}
sb.append("그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"\n");
jh(depth + 1);
}
for (int i = 0; i < depth; i++) {
sb.append("____");
}
sb.append("라고 답변하였지.\n");
}
}
📌 정리
이 문제는 알고리즘 난이도보다 재귀 호출의 실행 흐름 이해가 핵심이다.
- 재귀는 "내려가면서 실행 → 복귀하면서 실행" 구조임을 이해하면 해결 가능
- 백트래킹 문제 이해의 기초가 되는 문제
728x90
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
| [백준] 11004번 : K번째 수 (JAVA) (0) | 2026.02.22 |
|---|---|
| [백준] 9655번 : 돌 게임 (JAVA) (0) | 2026.02.20 |
| [백준] 1476번 : 날짜 계산 (JAVA) (0) | 2026.02.19 |
| [백준] 10815번 : 숫자 카드 (JAVA) (0) | 2026.02.17 |
| [백준] 25206번 : 너의 평점은 (JAVA) (0) | 2026.02.16 |