Coding/Step By Step

Baekjoon Training / recursion(재귀) / #25501 / ing

빈그레 2023. 2. 9. 20:31

 


#25501

 

 

 

 

주어진 코드 이해 (recursion , isPalindrom)
    int recursion(const char* s, int l, int r) {
    
    	//글자수가 0 or 1일 경우 (글자수 음수일 경우도 포함되지만 발생 x)
        if (l >= r) return 1; 
        
        //시작과 끝의 문자가 다를 경우
        else if (s[l] != s[r]) return 0; 
        
        // (그 외) 시작과 끝의 문자가 같을 경우 끝으로부터 하나 안쪽으로 해서 다시 recursion 호출
        else return recursion(s, l + 1, r - 1); 
    }

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

 

code
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int recursion_count=0;

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

int isPalindrome(string s) {
    return recursion(s, 0, s.length() - 1);
}

int main() {
    int num_of_string;
    cin >> num_of_string;

    vector<string> str(num_of_string);
    
    for (int i = 0;i < num_of_string;i++) {
        cin >> str[i];
    }

    for (int i = 0;i < num_of_string;i++) {
        cout << isPalindrome(str[i]) << " " << recursion_count << endl;
        recursion_count = 0;
    }

}

 

출력은 제대로 나오는데 시간초과가 뜬다....ㅜㅜ vector 써서 그런가....

 

 

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int recursion_count = 0;

int isPalindrome(string s) {
    int l = 0;
    int r = s.length() - 1;
    while (l < r) {
        ++recursion_count;
        if (s[l] != s[r]) return 0;
        ++l; --r;
    }

    ++recursion_count;
    return 1;
}

int main() {
    cin.tie(nullptr)->sync_with_stdio(false);

    int num_of_string;
    cin >> num_of_string;

    vector<string> str(num_of_string);

    for (int i = 0; i < num_of_string; i++) {
        cin >> str[i];
    }

    for (int i = 0; i < num_of_string; i++) {
        cout << isPalindrome(str[i]) << " " << recursion_count << endl;
        recursion_count = 0;
    }
    return 0;
}

해결!...