본문 바로가기

Algorithm/String

(C++) - 백준(BOJ) 15927번 : 회문은 회문아니야!!

반응형

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

 

15927번: 회문은 회문아니야!!

팰린드롬이란 앞으로 읽으나 뒤로 읽으나 같은 문자열을 말한다. 팰린드롬의 예시로 POP, ABBA 등이 있고, 팰린드롬이 아닌 것의 예시로 ABCA, PALINDROME 등이 있다. 같은 의미를 가지는 여러 단어들을

www.acmicpc.net

문자열 다루는 문제였습니다.

 

 

📕 풀이방법

 너무 깊게 생각하면 안됩니다. 약간의 직관이 필요합니다.

📔 입력 및 초기화

 string 형 변수 s에 문자열을 입력받습니다.

 

📔 풀이과정

 1. 모든 문자가 같다면 -1이 답입니다.

 

 2. 모두 같은 문자인 것을 제외한 모든 펠린드롬은 양 옆에 있는 문자중 하나의 문자를 제거하면 펠린드롬이 아니게 됩니다. 따라서 펠린드롬인 경우엔 문자열 s의 길이 - 1이 정답입니다.

 

 3. 펠린드롬이 아니라면 가장 긴 정답은 s문자열 그 자체의 길이입니다.


📕 Code

#include <bits/stdc++.h>
using namespace std;
string s;

bool isPalindrome(){    
    for(int i = 0; i < s.size() / 2; i++)
        if(s[i] != s[s.size() - 1 - i]) 
            return false;
    return true;
}

bool isAllSame(){
    map <char,int> alphaMap;
    for(int i = 0; i < s.size(); i++) alphaMap[s[i]] = 1;
    return alphaMap.size() == 1;
}

int main(){
    cin >> s;
    if(isAllSame()) { cout << -1; return 0; }
    if(isPalindrome()) {cout << s.size() - 1; return 0;}
    cout << s.size();
}