[백준 23304] https://www.acmicpc.net/problem/23304
[문제 조건]
AKARAKA(아카라카)는 컴퓨터 과학적 관점으로 바라봤을 때, 튜링도 기립 박수를 치고 갈 가히 최고의 구호라 할 수 있다. AKARAKA는 그 자체로도 팰린드롬이고, 접두사이자 접미사인 AKA가 또한 팰린드롬이기 때문이다.신촌에서는 AKARAKA같은 특성을 가진 팰린드롬을, 아카라카 팰린드롬이라 아래와 같이 정의한다.
문자열 가 팰린드롬이다. 팰린드롬이란 거꾸로 뒤집어 읽어도 같은 문자열을 뜻한다.
문자열 의 길이를 라 할 때, 길이의 접두사와 접미사가 모두 아카라카 팰린드롬이다.
만약 이면, 는 아카라카 팰린드롬이다
- 아카라카 팰린드롬 : 팰린드롬 + 접두사 & 접미사도 팰린드롬
-> 따라서 팰린드롬 판정과 문제에서 정의한 아카라카 팰린드롬 2번째 조건을 구현해야 한다.- 접두사랑 접미사랑 같은지 여부는 전체 단어가 팰린드롬인지 확인하는 과정에서 저절로 확인 되므로, 접두사만 팰린드롬인지 확인하면 된다.
#include <iostream>
#include <string>
using namespace std;
bool isAkarakaPalin(string s){
int len=s.length();
bool isPalin=true;
for(int i=0;i<len/2;i++){
if(s[i]!=s[len-i-1]){
isPalin=false;
}
} // Palindrome인지 확인
if(len>1){
string prefix=s.substr(0,len/2); // 접두사
if(!isAkarakaPalin(prefix))
isPalin=false;
}
return isPalin;
}
int main(void){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string origin;
cin>>origin;
if(isAkarakaPalin(origin)){
cout<<"AKARAKA"<<'\n';
}else{
cout<<"IPSELENTI"<<'\n';
}
return 0;
}
에스파 부럽다..... 우리학교 축제에도 와주라~~