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

+ Recent posts