출처
https://www.acmicpc.net/problem/17478
17478번: 재귀함수가 뭔가요?
평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다. 매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대
www.acmicpc.net
문제
평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다.
매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대학교가 자신과 맞는가에 대한 고민을 항상 해왔다.
중앙대학교와 자신의 길이 맞지 않다고 생각한 JH 교수님은 결국 중앙대학교를 떠나기로 결정하였다.
떠나기 전까지도 제자들을 생각하셨던 JH 교수님은 재귀함수가 무엇인지 물어보는 학생들을 위한 작은 선물로 자동 응답 챗봇을 준비하기로 했다.
JH 교수님이 만들 챗봇의 응답을 출력하는 프로그램을 만들어보자.
풀이
이 문제는 재귀함수의 동작 원리에 대해 잘 알 수 있는 문제였다.
문제풀이를 위해 먼저 repeat함수를 선언해 주었는데, 이 함수에는 line과 num이라는 값을 각각 받았다. num은 0부터 1씩 증가한다.
만약 input !== num이라면 반복되는 부분인 "재귀함수가 뭔가요? ~ 한 선비가 찾아와서 물었어."까지 str에 추가를 해주고 넘버를 1 올린다. 그리고 또다시 리피트 함수를 부른다.
그러면 넘버=== input 상황이 오는데 그때는 마지막 구문인 "재귀함수가 뭔가요? ~재귀함수는 자기 자신을 호출하는 함수라네."를 추가해 주었다.
재귀가 끝나면 "라고 답변하였지."가 추가되고 재귀가 되면서 추가되지 못했던 부분들도 함께 추가가 되게 된다.
기억할점
나는 line의 증가를 어떻게 표현할지 몰랐는데
string이라고 두고 2개씩 추가해 주는 아이디어를 참신하다고 생각했다.
코드
const fs = require('fs');
let input = Number(fs.readFileSync('/dev/stdin').toString());
let str = '';
console.log("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.");
const repeat = (line, num) => {
if (input !== num) {
str += `${line}"재귀함수가 뭔가요?"
${line}"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
${line}마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
${line}그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
`;
num++;
repeat(line + '____', num);
} else {
str += `${line}"재귀함수가 뭔가요?"
${line}"재귀함수는 자기 자신을 호출하는 함수라네"
`;
}
str += `${line}라고 답변하였지.
`;
}
repeat('',0,input);
console.log(str);
댓글