만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

재귀의 귀재

면접 대비

시간 제한2초메모리 제한1024 MB

요약
각 문자열에 대해 재귀 팰린드롬 검사의 반환값과 recursion 함수의 호출 횟수를 구합니다.
난이도

쉬움10점 중 3점

유형
투 포인터, 문자열, 재귀
정답자
아직 제출이 없습니다

문제

정휘는 후배들이 재귀 함수를 잘 다루는지 확인하려고 재귀 함수와 관련된 문제를 출제하기로 했다.

팰린드롬은 앞에서부터 읽은 것과 뒤에서부터 읽은 것이 같은 문자열이다. AAA, ABBA, ABABA는 팰린드롬이고, ABCA와 PALINDROME은 팰린드롬이 아니다.

어떤 문자열이 팰린드롬인지 판별하는 문제는 재귀 함수로 쉽게 풀 수 있다. 아래 코드의 isPalindrome 함수는 주어진 문자열이 팰린드롬이면 1, 아니면 0을 반환한다.

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

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);
}

int main(){
    printf("ABBA: %d\n", isPalindrome("ABBA")); // 1
    printf("ABC: %d\n", isPalindrome("ABC"));   // 0
}

정휘는 isPalindrome 함수로 문자열이 팰린드롬인지 판단하려고 한다.

구체적으로, 문자열 SS를 isPalindrome 함수의 인자로 전달해 팰린드롬 여부를 반환값으로 알아낸다. 판별하는 과정에서 recursion 함수를 몇 번 호출하는지도 센다.

정휘를 따라 isPalindrome 함수의 반환값과 recursion 함수의 호출 횟수를 구해 보자.

입력

첫째 줄에 테스트케이스의 개수 TT가 주어진다. (1≤T≤1 0001 \leq T \leq 1\,000)

둘째 줄부터 TT개의 줄에 알파벳 대문자로 구성된 문자열 SS가 주어진다. (1≤∣S∣≤1 0001 \leq \vert S\vert \leq 1\,000)

출력

각 테스트케이스마다 isPalindrome 함수의 반환값과 recursion 함수의 호출 횟수를 한 줄에 공백으로 구분하여 출력한다.

힌트

Python 3

def recursion(s, l, r):
    if l >= r: return 1
    elif s[l] != s[r]: return 0
    else: return recursion(s, l+1, r-1)

def isPalindrome(s):
    return recursion(s, 0, len(s)-1)

print('ABBA:', isPalindrome('ABBA'))
print('ABC:', isPalindrome('ABC'))

Java 15

public class Main{
    public static int recursion(String s, int l, int r){
        if(l >= r) return 1;
        else if(s.charAt(l) != s.charAt(r)) return 0;
        else return recursion(s, l+1, r-1);
    }
    public static int isPalindrome(String s){
        return recursion(s, 0, s.length()-1);
    }
    public static void main(String[] args){
        System.out.println("ABBA: " + isPalindrome("ABBA"));
        System.out.println("ABC: " + isPalindrome("ABC"));
    }
}

예제1

  1. 예제 1

    입력
    5
    AAA
    ABBA
    ABABA
    ABCA
    PALINDROME
    
    예상 출력
    1 2
    1 3
    1 3
    0 2
    0 1