알고리즘 풀이

[C#] 백준 17478번 문제풀이

bimtaeur30 2026. 1. 30. 21:55

문제번호: 17478

문제명: 재귀함수가 뭔가요?

문제링크: https://www.acmicpc.net/problem/1543

문제내용과 예제 입/출력은 위 문제 링크에서 확인해 주시기 바랍니다.

 

오늘은 재귀함수에서 제일 기초가 되는 문제를 풀어보았습니다. 문제 자체도 은근히 병맛스러운 부분도 있어서 오랜만에 즐겁게 문제를 풀 수 있었습니다. 이번 문제를 풀면서 "를 출력하는법을 알아냈습니다. 평소 쓸일이 없다보니까 이렇게 문제를 풀면서 알게 되었네요. 또한 new string('_', depth * 4); 이런식으로 반복되는 문자열을 특정 길이로 생성할 수 있다는 사실도 배우게 되었습니다. 이렇게 간단한 문법도 모르고있었다는게 부끄럽게 느껴졌고 반성할 수 있었던 시간이었습니다.

다음은 정답코드입니다.

 

public static void Main()
{
    Console.OutputEncoding = Encoding.UTF8;
    using var sr = new StreamReader(Console.OpenStandardInput());
    using var sw = new StreamWriter(Console.OpenStandardOutput());

    int n = int.Parse(sr.ReadLine());
    sw.WriteLine("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.");

    AnswerBot(0);
    void AnswerBot(int depth)
    {
        string indent = new string('_', depth * 4);

        if (n == depth)
        {
            sw.Write(indent);
            sw.Write("\"재귀함수가 뭔가요?\"");
            sw.WriteLine();

            sw.Write(indent);
            sw.Write("\"재귀함수는 자기 자신을 호출하는 함수라네\"");
            sw.WriteLine();

            sw.Write(indent);
            sw.Write("라고 답변하였지.");
            sw.WriteLine();

            return; // 종료
        }
        sw.Write(indent);
        sw.Write("\"재귀함수가 뭔가요?\"");
        sw.WriteLine();

        sw.Write(indent);
        sw.Write("\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.");
        sw.WriteLine();

        sw.Write(indent);
        sw.Write("마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.");
        sw.WriteLine();

        sw.Write(indent);
        sw.Write("그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"");
        sw.WriteLine();

        AnswerBot(depth + 1);

        sw.Write(indent);
        sw.Write("라고 답변하였지.");
        sw.WriteLine();
    }

    sr.Close();
    sw.Close();
}

'알고리즘 풀이' 카테고리의 다른 글

[C#] 백준 11728번 문제풀이  (0) 2026.02.01
[C#] 백준 13909번 문제풀이  (0) 2026.01.31
[C#] 백준 1543번 문제풀이  (0) 2026.01.29
[C#] 백준 2018번 문제풀이  (0) 2026.01.28
[C#] 백준 10867번 문제풀이  (0) 2026.01.27