Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- nullif
- AVLTree
- 너비우선탐색
- 깊이우선탐색
- 최소공배수
- ML
- COALESCE
- 데이터베이스
- self join
- coursera
- pgadmin
- udemy
- 자료구조
- sql
- BFS
- 유데미
- timestamp
- postgresql
- Andrew Ng
- 시퀄
- 최대공약수
- 개발
- 알고리즘
- Machine Learning
- BST
- CREATE TABLE
- 과제
- 백준
- Advanced SQL
- C++
Archives
- Today
- Total
승1's B(log n)
[백준 - C++] 17478번: 재귀함수가 뭔가요? 본문
이 문제는 어렵기보다는 귀찮고, 재귀될 때마다 달라지는 언더바를 어떻게 구현하는지가 중요했던 문제 같다.
나는 그냥 재귀함수의 파라미터로 n과 k를 받아서 k는 바뀌지 않는 수이자 몇 번의 재귀를 호출할 지 저장하는 수로 사용하고, n은 그 안에서 몇 번째 재귀인지 표시하는 역할로 사용했다. 그렇게 두 가지 인자를 받게 되면 두 가지 인자의 조작을 통해서 언더바와 그 안의 문자열의 개수를 통제할 수 있게 된다.
#include <iostream>
using namespace std;
void Recursive(int n, int k)
{
if(n == 0)
{
for(int i = 0; i < 4 * (k-n); i++)
cout << "_";
cout << "\"재귀함수가 뭔가요?\"" << endl;
for(int i = 0; i < 4 * (k-n); i++)
cout << "_";
cout << "\"재귀함수는 자기 자신을 호출하는 함수라네\"" << endl;
for(int i = 0; i < 4 * (k-n); i++)
cout << "_";
cout << "라고 답변하였지." << endl;
}
else{
for(int i = 0; i < 4 * (k-n); i++)
cout << "_";
cout << "\"재귀함수가 뭔가요?\"" << endl;
for(int i = 0; i < 4 * (k-n); i++)
cout << "_";
cout << "\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어." << endl;
for(int i = 0; i < 4 * (k-n); i++)
cout << "_";
cout << "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지." << endl;
for(int i = 0; i < 4 * (k-n); i++)
cout << "_";
cout << "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"" << endl;
Recursive(n-1, k);
for(int i = 0; i < 4 * (k-n); i++)
cout << "_";
cout << "라고 답변하였지." << endl;
}
}
int main(void) {
int N;
cin >> N;
cout << "어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다." << std::endl;
Recursive(N, N);
return 0;
}
재귀가 중첩될수록 언더바의 반복 횟수가 많아지므로 각 재귀 함수에서 언더바를 (k-n)만큼 호출하되 중첩될수록 n에서 1을 계속 빼는 식으로 호출해줬다. ex) Recursive(n-1, k)이런 식. 그리고 언더바의 개수가 네배씩 증가하므로 for문에서 4*(k-n)을 해줬다.
그리고 "라고 답변하였지"라는 말은 가장 안쪽 재귀함수에서만 출력이 되므로 그것을 출력하는 조건을 n = 0으로 걸어줬다.
https://www.acmicpc.net/problem/17478
17478번: 재귀함수가 뭔가요?
평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다. 매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대
www.acmicpc.net
'Problem Solving' 카테고리의 다른 글
[백준 - C++] 2869번: 달팽이는 올라가고 싶다 (0) | 2022.08.15 |
---|---|
[백준 - C++] 2581번: 소수 (0) | 2022.08.15 |
[백준 - C++] 5635번: 생일 (0) | 2022.08.14 |
[백준 - Python] 1764번: 듣보잡 (0) | 2022.08.14 |
[백준 - C++] 10845번: 큐 (0) | 2022.08.14 |
Comments