PS/BOJ

[PS][재귀] BOJ 17478 : 재귀함수가 뭔가요?

오리버거 2021. 8. 13. 22:45

[2021년 08월 13일 22시 40분 작성]

[PS][재귀]
BOJ 17478 : 재귀함수가 뭔가요?

[문제 링크 : 클릭]


1. 풀이

 

출력 예시를 보고, 재귀함수를 적절하게 설계하는 문제였습니다.

가장 깊이 있는 부분의 기저사례에 유의하여 재귀를 설계해주면 됩니다.


2. 소스코드

[Github 링크 : 클릭]

#include <bits/stdc++.h>
using namespace std;

int n;
const string tmp = "____";
string str[5] = {"\"재귀함수가 뭔가요?\"\n",
				"\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.\n",
				"마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.\n",
				"그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"\n",
				"\"재귀함수는 자기 자신을 호출하는 함수라네\"\n"
				};

void Solve(int k)
{
	if(k==n) //기저사례
	{
		for(int i=0; i<5; i+=4) //str[0], str[4]를 출력
		{
			for(int j=0; j<k; j++) cout<<tmp;
			cout<<str[i];
		}
		for(int j=0; j<k; j++) cout<<tmp; 
		cout<<"라고 답변하였지.\n";
		return;
	}

	for(int i=0; i<4; i++)
	{
		for(int j=0; j<k; j++) cout<<tmp;
		cout<<str[i];
	}
	Solve(k+1);
	
	for(int j=0; j<k; j++) cout<<tmp;
	cout<<"라고 답변하였지.\n";
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);

	cin>>n;

	cout<<"어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.\n";

	Solve(0);

	return 0;	
}

3. 복기

- 좀 더 깔끔하게 풀 수 있지 않았을까..

- 정답 제출은 좀 더 신중하게 ..