[C++] 백준 23304 - 아카라카

메르센고수·2023년 8월 21일
0

Baekjoon

목록 보기
23/48
post-thumbnail

문제 - 아카라카 (Silver 2)

[백준 23304] https://www.acmicpc.net/problem/23304

풀이 전략

[문제 조건]
AKARAKA(아카라카)는 컴퓨터 과학적 관점으로 바라봤을 때, 튜링도 기립 박수를 치고 갈 가히 최고의 구호라 할 수 있다. AKARAKA는 그 자체로도 팰린드롬이고, 접두사이자 접미사인 AKA가 또한 팰린드롬이기 때문이다.

신촌에서는 AKARAKA같은 특성을 가진 팰린드롬을, 아카라카 팰린드롬이라 아래와 같이 정의한다.

문자열 SS가 팰린드롬이다. 팰린드롬이란 거꾸로 뒤집어 읽어도 같은 문자열을 뜻한다.
문자열 SS의 길이를 S|S|라 할 때, S2\lfloor\frac{|S|}{2}\rfloor 길이의 접두사와 접미사가 모두 아카라카 팰린드롬이다.
만약 S=1|S| = 1이면, SS는 아카라카 팰린드롬이다

  • 아카라카 팰린드롬 : 팰린드롬 + 접두사 & 접미사도 팰린드롬
    -> 따라서 팰린드롬 판정과 문제에서 정의한 아카라카 팰린드롬 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;
}

결과

느낀점

에스파 부럽다..... 우리학교 축제에도 와주라~~

profile
블로그 이전했습니다 (https://phj6724.tistory.com/)

0개의 댓글