알고리즘 문제

[C/C++ 백준 1254번] 팰린드롬 만들기 (Silver 1)

새파란 공대생 2020. 5. 28. 16:02

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

 

1254번: 팰린드롬 만들기

동호와 규완이는 212호에서 문자열에 대해 공부하고 있다. 규완이는 팰린드롬을 엄청나게 좋아한다. 팰린드롬이란 앞에서부터 읽으나 뒤에서부터 읽으나 같게 읽히는 문자열을 말한다. 동호는 �

www.acmicpc.net

 전에 보니까 팰린드롬인지 검사하는 문제도 있는거 같던데, 그걸 먼저 풀고 오면 좋았을 것이다.

간단해 보이면서도 은근 까다로운 문제다. 다이나믹 프로그래밍 카테고리에 있어서 dp로 풀 방법을 계속 고민해봤는데, 일단 dp를 쓰지 않고 푸는 방법으로 해결했다. 

 방법은, 앞에서부터 한 글자씩 뒤로 대칭시키며 매 번 팰린드롬인지 검사하는 것이다. 그러면 넘긴 다음숫자부터 끝까지가 팰린드롬인지 검사하여 맞으면 바로 break 시키고 넘긴숫자길이 + 원래숫자길이를 해주면 된다.

 

#include <cstdio>
#include <cstring>
int main(void){
	char S[1001];
	scanf("%s",S);
	int len=strlen(S);
	bool correct;
	for(int i=0; i<len; i++){
		correct=true;
		for(int j=i; j<len; j++){//펠린드롬 검사 
			if(S[j]!=S[len-1-(j-i)]){
				correct = false;
				break;
			}		 
		}
		if(correct){
			printf("%d",len + i);
			break;
		}
	}
}