728x90
17478번: 재귀함수가 뭔가요? (acmicpc.net)
난이도 : 실버 5
오타확인 필수!
풀이과정 : 문제그대로 재귀함수를 이용해서 풉니다
1. n의 값이 함수에 들어오면 0이 될때까지 question~answer03까지 출력후 n--해주고 재귀함수로 다시들어갑니다.
(그 후에꺼(end1)는 n의 값대로 출력되겠죠?)
2. n이 0이되면 진짜 답을 출력해줍니다. (question,answer2,end1)
간단해보여도 미리 어떻게 풀건지 메모장에 정리하기 ㅠ 생각보다 오래걸린 문제
* string이름을 end라고 하면 출력할 때 모호하다고 오류가 뜨네용. 그래서 end1으로 변수이름을 바꿨어요
답 :
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
string start = "어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.\n";
string question = "\"재귀함수가 뭔가요\?\"\n";
string answer01 = "\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.\n";
string answer02 = "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.\n";
string answer03 = "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"\n";
string answer2 = "\"재귀함수는 자기 자신을 호출하는 함수라네\"\n";
string end1 = "라고 답변하였지.\n";
int cnt;
void chatbot(int n) {
if (n==0) { //기저조건
for (int i = 0; i < cnt; i++) cout << "____";
cout << question;
for (int i = 0; i < cnt; i++) cout << "____";
cout << answer2;
for (int i = 0; i < cnt; i++) cout << "____";
cout << end1;
return;
}
if(n>0&&n<=50) {
for (int i = n; i <cnt; i++) cout << "____";
cout << question;
for (int i = n; i < cnt; i++) cout << "____";
cout << answer01;
for (int i = n; i < cnt; i++) cout << "____";
cout << answer02;
for (int i = n; i < cnt; i++) cout << "____";
cout << answer03;
chatbot(n-1);
for (int i = n; i < cnt; i++) cout << "____";
cout << end1;
}
}
int main() {
int n;
scanf("%d", &n);
cnt = n;
cout << start;
chatbot(n);
return 0;
}
728x90
'Algorithm > Solution' 카테고리의 다른 글
[C++] 1260 DFS와 BFS (0) | 2021.03.14 |
---|---|
[C++] 2309 일곱 난쟁이 (0) | 2021.02.26 |
[C++] 2960번 에라토스테네스의 체 (0) | 2021.01.17 |
[C++] 2167번 2차원 배열의 합 (0) | 2021.01.17 |
[C++] 11944번 NN (0) | 2021.01.10 |