백준 25501번: 재귀의 귀재 링크
https://www.acmicpc.net/problem/25501
문제를 풀기 전 생각한 것
테스트 반복을 할 것이기 때문에 for문 사용
recursion 함수 반복 횟수를 세줄 cnt
풀면서 어려웠던 점
문자열을 불러와서 출력시키는 것은 어렵지 않았다.
하지만 재귀함수가 호출된 횟수를 어디서 어떻게 받아야 할지 몰랐다.
이런 건 계속 붙잡고 있으니 자연스럽게 해결됐는데 백준에 제출하니 틀렸다고 나왔다.
코드
#include <stdio.h>
#include <string.h>
int cnt;
int count(){
cnt += 1;
return cnt;
}
int recursion(const char *s, int l, int r){
if(l >= r)
return 1;
else if(s[l] != s[r])
return 0;
else
count();
return recursion(s, l+1, r-1);
}
int isPalindrome(const char *s){
return recursion(s, 0, strlen(s)-1);
}
int main(){
int t;
char s[1001];
scanf("%d",&t);
for (int i = 0; i < t; i++){
scanf("%s",s);
printf("%d ",isPalindrome(s));
printf("%d\n",count());
cnt = 0;
}
}
풀면서 배운 점
출력할 때 한꺼번에 하면 파라미터는 뒤에서부터 처리될 수도 있고 앞에서부터 처리될 수도 있다고 한다.
그리고 최악의 경우 무작위 순서일 수도 있다고 한다. 그래서 확실하게 나눠서 써줘야 한다.
반응형