Little Jay

[C++] 백준 23304번 - 아카라카 본문

알고리즘/BOJ

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

Jay, Lee 2022. 5. 13. 15:54

문자열 문제 중 대표적인 문제인 팰린드롬 문제이다.

단순히 문자열이 팰린드롬인지 확인하는 것이 아니라, 

재귀적으로 left와 right로 나누어서 팰린드롬을 확인해줘야 했던 문제이다.

 

종료조건은 문자열의 size가 1일때 return해주면 된다. 

여타 팰린드롬 문제가 그러하듯 항상 문자열의 size가 홀수일때와 짝수일때를 구분해주면 된다. 

#include <bits/stdc++.h>
#define endl '\n'
using namespace std;

string s;

bool palindrome(string a) {
	if (a.size() == 1) return true;

	string left, right;
	int size = a.size() / 2;
	for (int i = 0; i < size; i++) {
		left += a[i];
	}
	for (int i = 0; i < size; i++) {
		if (a.size() % 2 == 1) right += a[i + size + 1];
		else right += a[i + size];
	}
	if (left != right) return false;
	if (palindrome(left) && palindrome(right)) return true;
	
	return false;
}

int main() {

	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	cin >> s;
	if (palindrome(s)) cout << "AKARAKA" << endl;
	else cout << "IPSELENTI" << endl;

	return 0;

}

 

Comments