Uknow's Lab.
article thumbnail

 

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

 

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

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

www.acmicpc.net

 

난이도 : 실버 5
태그 : 구현, 재귀

 

 

설명

재귀함수를 연습하기 좋은 문제 같네요.

마지막에 "라고 답변하셨지." 문장 덕분에, 함수의 맨 끝에 재귀적 호출이 아닌,

함수의 중간 위치에서 재귀적 호출을 해야 합니다.

 

 

 

소스코드

val str = arrayOf(
    "\"재귀함수가 뭔가요?\"",
    "\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.",
    "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.",
    "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"",
)

val sb = StringBuilder()
var n = 0

fun main() {
    sb.append("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.").append("\n")
    n = readln().toInt()
    solve(0)
    print(sb)
}

fun solve(depth: Int) {
    if (depth == n) {
        printUnderScore(depth)
        sb.append("\"재귀함수가 뭔가요?\"").append("\n")

        printUnderScore(depth)
        sb.append("\"재귀함수는 자기 자신을 호출하는 함수라네\"").append("\n")
    } else {
        for (i in str.indices) {
            printUnderScore(depth)
            sb.append(str[i]).append("\n")
        }

        solve(depth + 1)
    }

    printUnderScore(depth)
    sb.append("라고 답변하였지.").append("\n")
}


fun printUnderScore(n:Int) {
    repeat(n) {
        sb.append("____")
    }
}

 

 

코드분석

  1. 재귀 함수
    1. depth(재귀 깊이)가 n보다 작다면 재귀함수가 뭔가요 ~ 한 선비가 찾아와서 물었어. 를 출력하고 재귀적으로 함수 호출
    2. depth가 n과 같다면 재귀함수가 뭔가요 ~ 자기 자신을 호출하는 함수라네~ 부분 출력.
    3. "라고 말씀하셨지" 출력
  2. main()에서 함수 호출

 

 

후기

계속 틀렸다 뜨길래 왜이러지 했는데... '_'를 '-'로 잘못적고...

공백문자가 있어야 하는데 없었고... '.' 문장 마침표가 없어 틀렸었습니다.

여러모로 애먹은 문제였습니다.

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.