728x90
SMALL
재귀함수로, ___를 두가지 방식으로 해결할 수 있다.
재귀 횟수를 세는 n, 그리고 ___ 을 세는 cnt가 있다
재귀 횟수는 n번으로 n이 1보다 작거나 같으면 종료해야한다.
cnt는 ___을 세기 위함이다. n을 감소시켰기 때문에 증가하는 변수인 cnt를 0으로 초기화하였다.
cnt는 맨 처음 컴공과 학생이 교수에게 하는 말인 "재귀함수가 뭔가요./ " 앞에는 없으므로 0이 초깃값이다.
(사실 종료 조건을 n으로 둔 다음 인자에 cnt만 두고 cnt를 증가시켜 종료 조건을 달면 함수 파라미터 수가 하나 줄어서 깔끔했을 것 같다)
코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.");
sol(n+1, 0);
}
private static void sol(int n, int cnt) {
if (n <= 1) {
for (int i = 0; i < cnt; i++) {
System.out.print("____");
}
System.out.println("\"재귀함수가 뭔가요?\"");
for (int i = 0; i < cnt; i++) {
System.out.print("____");
}
System.out.println("\"재귀함수는 자기 자신을 호출하는 함수라네\"");
for (int i = 0; i < cnt; i++) {
System.out.print("____");
}
System.out.println("라고 답변하였지.");
return;
}
for (int i = 0; i < cnt; i++) {
System.out.print("____");
}
System.out.println("\"재귀함수가 뭔가요?\"");
for (int i = 0; i < cnt; i++) {
System.out.print("____");
}
System.out.println("\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.");
for (int i = 0; i < cnt; i++) {
System.out.print("____");
}
System.out.println("마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.");
for (int i = 0; i < cnt; i++) {
System.out.print("____");
}
System.out.println("그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"");
sol(n-1, cnt + 1);
for (int i = 0; i < cnt; i++) {
System.out.print("____");
}
System.out.println("라고 답변하였지.");
}
}
코드 (C++)
#include <iostream>
using namespace std;
void sol(int n, string str){
if (n == 0){
cout << str + "\"재귀함수가 뭔가요?\"\n";
cout << str + "\"재귀함수는 자기 자신을 호출하는 함수라네\"\n";
cout << str + "라고 답변하였지.\n";
return;
}
cout << str + "\"재귀함수가 뭔가요?\"\n";
cout << str + "\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.\n" +
str + "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.\n" +
str + "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"\n";
sol(n-1, str + "____");
cout << (str + "라고 답변하였지.\n");
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n;
cin >> n;
cout << "어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다." << '\n';
sol(n, "");
return 0;
}
728x90
LIST
'PS > BOJ' 카테고리의 다른 글
백준 2578 (Java) 빙고 (0) | 2023.02.09 |
---|---|
백준 3584 (Java) 가장 가까운 공통 조상 (0) | 2023.02.07 |
백준 12851 (C++) 숨바꼭질 (2) | 2023.01.30 |
백준 3184 (python) 양 (3) | 2022.09.01 |
백준 1389 (python) 케빈 베이컨의 6단계 법칙 (2) | 2022.08.29 |