글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자입니다

 

목차

     

     

     


     

     

    [백준 25501] 재귀의 귀재

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

     

    25501번: 재귀의 귀재

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

    www.acmicpc.net

     


    첫 코드

     

    #include <iostream>
    #include <string>
    using namespace std;
     
    int center = 0;
     
    int count() 
    {
        center += 1;
        return center;
    }
     
    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;
        cin >> T;
        char S[1001];
     
        for (int i = 0; i < T; i++
        {
            cin >> S;
     
            cout << isPalindrome(S) << " ";
            cout << count() << endl;
            center = 0;
        }
    }
    cs

     

     

    문제 힌트에서 주어진 코드를 활용한 해답이다. recursion()을 이용해서 1 또는 0을 출력한다. count() 함수를 만들어서 호출 횟수를 기록하여 출력한다.

    ※ isPalindrome()의 함수의 연산이 끝난 후에 count()를 출력해야 한다.    
        cout << isPalindrome(S) << " " << count() << endl;

        위와 같이 한 줄로 출력을 하면 count()가 완료되지 않은 상태의 값이 1이 출력된다.

     

     

     


     

    더 나은 코드

     

    #include <iostream>
    #include <string>
    using namespace std;
     
    int main()
    {
        int T;
        cin >> T;
     
        for (int i = 0; i < T; i++)
        {
            string s;
            cin >> s;
     
            int center = 0;
            int left = 0;
            int right = s.length() - 1;
            bool flag = true;
     
            for (; left <= right; left++, right--)
            {
                center++;
     
                if (s[left] != s[right])
                {
                    flag = false;
                    break;
                }
            }
     
            cout << (flag ? 1 : 0<< " " << 
            (flag && s.length() % 2 == 0 ? center + 1 : center) << endl;
        }
    }
    cs

     

     


     

     

     

    '⭐ 코딩테스트' 카테고리의 다른 글

    [백준 2587 C++] 대표값2  (0) 2022.11.16
    [백준 10817 C++] 세 수  (0) 2022.11.08
    [백준 2738] 행렬 덧셈  (0) 2022.11.07
    [백준 2750] 정렬  (0) 2022.11.03
    [백준 1978] 소수 찾기  (0) 2022.07.23