https://www.acmicpc.net/problem/17478
난이도 : 실버 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("____")
}
}
코드분석
- 재귀 함수
- depth(재귀 깊이)가 n보다 작다면 재귀함수가 뭔가요 ~ 한 선비가 찾아와서 물었어. 를 출력하고 재귀적으로 함수 호출
- depth가 n과 같다면 재귀함수가 뭔가요 ~ 자기 자신을 호출하는 함수라네~ 부분 출력.
- "라고 말씀하셨지" 출력
- main()에서 함수 호출
후기
계속 틀렸다 뜨길래 왜이러지 했는데... '_'를 '-'로 잘못적고...
공백문자가 있어야 하는데 없었고... '.' 문장 마침표가 없어 틀렸었습니다.
여러모로 애먹은 문제였습니다.
'코딩테스트 > Kotlin' 카테고리의 다른 글
[백준 2458번] [Kotlin] 키 순서 (0) | 2023.02.07 |
---|---|
[백준 9316번] [Kotlin] Hello Judge (0) | 2023.02.06 |
[백준 11656번] [Kotlin] 접미사 배열 (0) | 2023.02.05 |
[백준 10159번] [Kotlin] 저울 (0) | 2023.02.05 |
[백준 4963번] [Kotlin] 섬의 개수 (0) | 2023.02.04 |