백준 C, C++ 문제

25501번, 재귀의 귀재

swchung09 2025. 4. 13. 14:48

https://www.acmicpc.net/problem/25501

이 문제는 isPalindrome함수를 활용해서 함수의 반환 값과 recursion 함수의 호출 횟수를 출력하는 문제이다.


우선 이 문제에서는 문자열을 사용하므로, stdio.h와 string.h를 불러온다.

#include <stdio.h>
#include <string.h>

이 문제를 쉽게 풀기 위해서 run_time이라는 전역 변수를 생성한다.

int run_time;

그 다음 이 문제에서 기본 적으로 준 recursion함수와 isPalindrome함수를 정의한다.

int recursion(const char *s, int l, int r){
    if(l >= r) return 1;
    else if(s[l] != s[r]) return 0;
    else return recursion(s, l+1, r-1);
}

int isPalindrome(const char *s){
    return recursion(s, 0, strlen(s)-1);
}

그리고 main함수에서 n을 입력받고, for문으로 문자열을 입력받고 결과 값을 출력한다.

int main(){
    char s[1001];
    int n, a;
    scanf("%d", &n);
    for (int i = 0; i < n; i++){
        scanf("%s", &s);
        a = isPalindrome(s);
        printf("%d %d\n", a, run_time);
    }
}

최종 코드

#include <stdio.h>
#include <string.h>

int run_time;

int recursion(const char *s, int l, int r){
    run_time += 1;
    if(l >= r) return 1;
    else if(s[l] != s[r]) return 0;
    else return recursion(s, l+1, r-1);
}

int isPalindrome(const char *s){
    run_time = 0;
    return recursion(s, 0, strlen(s)-1);
}

int main(){
    char s[1001];
    int n, a;
    scanf("%d", &n);
    for (int i = 0; i < n; i++){
        scanf("%s", &s);
        a = isPalindrome(s);
        printf("%d %d\n", a, run_time);
    }
}

 

'백준 C, C++ 문제' 카테고리의 다른 글

10870번, 피보나치 수 5  (0) 2025.04.13
27433번, 팩토리얼 2  (0) 2025.04.13
10871번, X보다 작은 수  (0) 2025.04.08
10807번, 개수 세기  (0) 2025.04.08
10818번, 최소, 최대  (0) 2025.04.07