728x90

 0. [c++] 백준


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


 1. 풀이


이 문제는 입력으로 들어온 문자열을 쪼개어 만들수 있는 문자열 중 가장 긴 회문이 아닌 문자열의 길이를 구하는 문제이다.


이 길이를 구하기 위해서는 3가지 경우에 수로 나뉜다.

1. 애초에 회문이 아닌 경우.

이 경우에는 바로 문자열의 길이를 출력하면 된다.


2. 회문인데 모든 글자가 일치하는 경우

이 경우는 어떠한 경우를 찾아보더라도 모두 회문이므로 -1을 출력한다.


3. 회문인데 모든 글자가 일치하지는 않는 경우

이 경우는 1자리만 줄이고 회문을 검사해보면 대칭이 깨지게되어 회문이 아니게 된다.

즉 (문자열의 길이 - 1)을 출력하면 된다.



 2. 소스코드


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
28
29
30
31
32
33
#include<iostream>
#include<algorithm>
#include<string>
 
using namespace std;
 
int check_not_palindrome(const string& N) {
    int size = N.size();
    for (int i = 0; i < size / 2; i++) {
        if (N[i] != N[size - i - 1])
            return size;
    }
    
    for (int i = 1; i < size; i++) {
        if (N[0!= N[i]) {
            return size - 1;
        }
    }
 
    return -1;
}
 
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
 
    string N;
    cin >> N;
 
    cout << check_not_palindrome(N);
 
    return 0;
}
cs


 3. 참고




질문이나 지적 있으시면 댓글로 남겨주세요~

도움 되셨으면 하트 꾹!


+ Recent posts