반응형

백준 17478번 문제입니다. (solved.ac)기준 실버 5 문제입니다.

https://www.acmicpc.net/problem/17478

 

17478번: 재귀함수가 뭔가요?

평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다. 매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대

www.acmicpc.net

문제

문제 접근

재귀호출할 횟수를 입력받고 그 횟수만큼 "재귀함수가 뭔가요 ~~찾아와서 물었어." 까지와 "라고 답변하였지."를 반복해서 ____(언더바 4개) 와 출력하는 문제입니다. "라고 답변하였지." 부분은 위의 부분과는 예시 출력 맨 아래에 출력되어있는 것을 볼 수 있는데 이것을 통하여 재귀 호출 이후에 실행되는 부분임을 알 수 있습니다.

whatIsTheRecursion이라는 함수는 첫 번째 인자로는 재귀호출할 횟수(cnt)를, 두 번째 인자로는 현재 몇 번째 호출(times)인지를 받습니다.

재귀가될 때마다 cnt는 -1, times는 +1되며 호출됩니다.

printUnder함수는 인자로 받은 수만큼 반복하여 ____를 출력해줍니다.

cnt가 0이면 한번만 출력되는 부분이 출력되고 함수가 return됩니다.

재귀 호출은 stack형식으로 쌓여가며 진행된다고 생각하면 좋습니다.

정답 코드

fun main(){

    val cnt = readln().toInt()

    println("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.")
    whatIsTheRecursion(cnt,0)

}

fun whatIsTheRecursion(cnt : Int, times : Int){
    if (cnt == 0){
        printUnder(times)
        println("\"재귀함수가 뭔가요?\"");
        printUnder(times)
        println("\"재귀함수는 자기 자신을 호출하는 함수라네\"");
        printUnder(times)
        println("라고 답변하였지.");
        return
    }
    printUnder(times)
    println("\"재귀함수가 뭔가요?\"");
    printUnder(times)
    println("\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.");
    printUnder(times)
    println("마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.");
    printUnder(times)
    println("그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"");
    whatIsTheRecursion(cnt-1, times+1)
    printUnder(times)
    println("라고 답변하였지.");
}
fun printUnder(cnt : Int){
    for (cnt in 0 until cnt){
        print("____")
    }
}
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기