https://www.acmicpc.net/problem/15927
15927번: 회문은 회문아니야!!
팰린드롬이란 앞으로 읽으나 뒤로 읽으나 같은 문자열을 말한다. 팰린드롬의 예시로 POP, ABBA 등이 있고, 팰린드롬이 아닌 것의 예시로 ABCA, PALINDROME 등이 있다. 같은 의미를 가지는 여러 단어들을
www.acmicpc.net
#include <bits/stdc++.h>
#include <stack>
using namespace std;
bool isPalin(string s) {
int len = s.length();
stack <char> stk;
// String length가 짝수일 경우 팰린드롬 판별
if (len % 2 == 0) {
// 문자열의 반을 스택에 넣고, 나머지 반과 비교
for (int i = 0; i < len / 2; i++)
stk.push(s[i]);
for (int i = len / 2; i < len; i++) {
char comp = stk.top(); stk.pop();
if (comp != s[i])
return 0;
}
return 1;
}
// String length가 홀수일 경우 팰린드롬 판별
else if (len % 2 == 1) {
// 문자열의 반을 스택에 넣고 +1 한 다음, 나머지와 비교
for (int i = 0; i < len / 2; i++)
stk.push(s[i]);
for (int i = len / 2 + 1; i < len; i++) {
char comp = stk.top(); stk.pop();
if (comp != s[i])
return 0;
}
return 1;
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string s; cin >> s;
bool isPalindrome = false;
isPalindrome = isPalin(s);
if (isPalindrome) {
// 팰린드롬이면 맨 뒤 문자 하나 제거하고 다시 비교
s.pop_back();
// 또다시 팰린드롬이라면 무적의 팰린드롬 ex) ZZZ, AAAAAA
if (isPalin(s)) {
cout << "-1";
}
else
cout << s.length();
}
// 원본 문자열이 팰린드롬이 아니라면 길이를 그대로 출력
else {
cout << s.length();
}
}
'알고리즘(CPP)' 카테고리의 다른 글
[백준/C++] 16953번 A → B (0) | 2022.09.24 |
---|---|
[백준/C++] 12761번 돌다리 (0) | 2022.09.24 |
[백준/C++] 1303번 전쟁 - 전투 (3) | 2022.09.23 |