17478 재귀함수가 뭔가요?
https://www.acmicpc.net/problem/17478문제설명
재귀 호출을 사용하여 특정 패턴의 문자열을 출력한다.
접근방식
O(N^2) 시간복잡도
각 호출에서 고정된 수의 출력을 발생시킨다.
문제 조건 분석 과정
- 재귀 호출이 깊이 N에 따라 N번 발생한다.
- 각 호출마다 고정된 수의 출력문이 실행된다.
- 출력문 수는 깊이와 상관없이 동일하며, 주어진 깊이 N의 경우 N번 호출된다.
- 각 호출에서 4개의 출력문과 1개의 종료 문이 있다.
전체코드
import java.io.*; // 입력과 출력을 위한 라이브러리 import
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 재귀 호출의 깊이
int N = Integer.parseInt(br.readLine());
// 고정된 문장
System.out.println("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.");
// 재귀 함수 호출을
recur(N);
}
// 현재 깊이를 나타내는 밑줄
static String underbar = "";
public static void recur(int N) {
// 현재 깊이에 따른 줄을 준비
String line = underbar;
// 재귀 호출의 종료 조건
if (N == 0) {
// 가장 깊은 레벨에서의 출력
System.out.println(line + "\"재귀함수가 뭔가요?\"");
System.out.println(line + "\"재귀함수는 자기 자신을 호출하는 함수라네\"");
System.out.println(line + "라고 답변하였지.");
return; // 종료 조건을 만족하면 함수를 종료
}
System.out.println(line + "\"재귀함수가 뭔가요?\"");
System.out.println(line + "\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.");
System.out.println(line + "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.");
System.out.println(line + "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"");
// 다음 깊이를 위한 밑줄 추가
underbar += "____";
// 재귀 호출로 다음 깊이로 이동
recur(N - 1);
// 현재 레벨에서의 종료 문장 출력
System.out.println(line + "라고 답변하였지.");
}
}
'자료구조 > 문제풀이' 카테고리의 다른 글
[백준 JAVA] 13023 ABCDE (0) | 2024.08.22 |
---|---|
[백준 JAVA] 14620 꽃길 (0) | 2024.08.22 |
[백준 JAVA] 2206 벽 부수고 이동하기 (0) | 2024.08.22 |
[백준 JAVA] 7569 토마토 (0) | 2024.08.22 |
[백준 JAVA] 1600 말이 되고픈 원숭이 (0) | 2024.08.22 |