컴퓨터/문제풀이집
백준 단계별로 풀어보기에 재귀 영역에 있는 문제입니다.
재귀 함수를 통한 해결법을 제시하기를 바라는 문제입니다.
출력 부분은 크게 3가지 부분으로 나눌 수 있다.
이 부분을 코드로 써 내려가기 전 구분을 지어보자면,
#include<stdio.h>
//전역변수 - 재귀 반복 회수
int N;
//재귀함수 진행하면서 _를 출력하기 위한 부분
void func(int cnt){
for(int i = 0 ; i < cnt*4;i++){
printf("_");
}
}
//재귀 함수 부분
void solve(int cnt){
//종료 부분
if(cnt == N ){
func(cnt);
printf("\"재귀함수가 뭔가요?\"\n");
func(cnt);
printf("\"재귀함수는 자기 자신을 호출하는 함수라네\"\n");
func(cnt);
printf("라고 답변하였지.\n");
return;
}
//계속해서 반복회수에 따른 _및 반복 부분을 출력한다.
func(cnt);
printf("\"재귀함수가 뭔가요?\"\n");
func(cnt);
printf("\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.\n");
func(cnt);
printf("마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.\n");
func(cnt);
printf("그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"\n");
//***** 반복 부분이후 재귀함수로 다시 반복부분을 호출한다 ****//
solve(cnt+1);
func(cnt);
printf("라고 답변하였지.\n");
}
// main함수
int main(){
//재귀 회수 입력
scanf("%d",&N);
//초기문 출력
printf("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.\n");
//재귀 함수 시작
solve(0);
return 0;
}
재귀 함수를 간단하게 이해하는 문제 중 하나라고 생각했습니다.
다만, 수학적 계산이 아닌 문자열의 출력이기 때문에 다소 생소한 부분이 있었습니다.
재귀 함수에서 함수의 호출 시점과 종료 시점의 설정을 어떻게 하는지 잘 익힐 수 있었습니다.
더 개선하여 조금 더 깔끔한 소스코드가 있을 수도 있지만... 동작은 잘하니 마무리하겠습니다.
백준 11729 - 하노이 탑 이동 순서 (0) | 2022.06.03 |
---|---|
백준 2798 - 블랙잭 (0) | 2022.05.29 |
백준 2750 - 수 정렬하기 (0) | 2022.05.16 |
백준 2747 / 2748 - 피보나치 수 1,2 (재귀 vs 반복) (0) | 2021.11.25 |
백준 2503 - 숫자 야구(C언어) (0) | 2021.09.20 |
91년생 공학엔지니어의 개발일지
TODAY :
YESTER DAY :
TOTAL :
Commnet