Algorithm/BOJ

KOI 2019 1차 초등부 2 / 회문 - 17609

jhg0406 2020. 8. 13. 14:51
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
using namespace std;
 
int slv(string& s, bool flag) {
    int end = s.size()/2;
    for(int i = 0; i<end++i) {
        if(s[i] != s[s.size()-1-i]) {
            if(flag) return 2;
            string s1 = s.substr(0, i) + s.substr(i+1, s.size()-i-1);
            string s2 = s.substr(0, s.size()-i-1+ s.substr(s.size()-i, i);
            return min(slv(s1, true), slv(s2, true));
        }
    }
    return flag;
}
 
int main() {
    ios_base::sync_with_stdio(0), cin.tie(0);
    int C;
    cin >> C;
    for(int t = 0; t<C; ++t) {
        string s;
        cin >> s;
 
        cout << slv(s, false<< "\n";
    }
}
cs

 

 

 

 

 

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

 

17609번: 회문

각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다.

www.acmicpc.net

 

 

 

 

 

회문

문자열이 대칭인지 확인하다가 한번 어긋나면, 어긋난 문자열을 뺀 부분문자열에 대해 다시 대칭인지 확인하면 문제를 해결 할 수 있습니다.