티스토리 뷰

문제

www.acmicpc.net/problem/15927

 

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

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

www.acmicpc.net

 

문제 풀이

 

1. 문자열이 팰린드롬이 아닌 경우) 문자열 그 자체가 팰린드롬이 아닌 가장 긴 부분 문자열의 길이이므로 그 길이를 출력하면 됩니다.

 

2. 문자열이 팰린드롬인 경우) 일반적인 팰린드롬의 성질에 대해서 생각해볼 때, 문자열의 시작과 끝 중에서 한 글자만 빠져도 팰린드롬이 깨진 다는 걸 알 수 있습니다.

  • 모든 문자가 같은 문자열일 경우 모든 부분문자열에 대해 각 부분 문자열이 팰린드롬이기에 이 경우는 예외 처리해줍니다.

코드

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

int n;
char c;
string s;

int main() {
	cin.tie(NULL); cout.tie(NULL);
	ios_base::sync_with_stdio(false);

	cin >> s;
	n = s.length(); c = s[n / 2];
	bool pal = 1, allsame = 1;
	for (int i = 0; i < n / 2; i++) {
		if (c != s[i]) allsame = 0;
		if (s[i] != s[n - 1 - i]) {
			pal = 0;
			break;
		}
	}
	if (!pal) cout << n;
	else {
		if (allsame) cout << -1;
		else cout << n - 1;
	}
}

 

'Algorithm > BOJ' 카테고리의 다른 글

[백준 2887] 행성터널  (0) 2020.10.10
[백준 12107] 약수 지우기 게임 1  (0) 2020.10.05
[백준 2381] 최대거리  (0) 2020.10.05
[백준 5980] Corn Maze  (0) 2020.09.19
[백준 1981] 배열에서 이동  (0) 2020.09.19
댓글