백준

백준 25501번: 재귀의 귀재 (C언어)

NamDoHyeon 2023. 6. 29. 22:51

백준 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;
    }
}

풀면서 배운 점

출력할 때 한꺼번에 하면 파라미터는 뒤에서부터 처리될 수도 있고 앞에서부터 처리될 수도 있다고 한다.

그리고 최악의 경우 무작위 순서일 수도 있다고 한다. 그래서 확실하게 나눠서 써줘야 한다.

반응형