※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 5502번 문제인 팰린드롬이다.
문제는 아래 링크를 확인하자.

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

 

5502번: 팰린드롬

팰린드롬이란 대칭 문자열이다. 즉, 왼쪽에서 오른쪽으로 읽었을때와 오른쪽에서 왼쪽으로 읽었을때 같다는 얘기다. 당신은 문자열이 주어졌을때, 최소 개수의 문자를 삽입하여 팰린드롬이

www.acmicpc.net

주어진 문자열에서 가장 긴 부분 회문 수열을 찾아 문제를 해결하자.

 

위와 같은 수열은 주어진 문자열 s와 s를 뒤집어 만든 문자열 ss의 LCS와 같다는 점은 잘 알려져있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int slen;
string s, ss;
int dp[5001][5001];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> slen >> s;
	ss = s; reverse(ss.begin(), ss.end());
	s = " " + s, ss = " " + ss;
	
	for (int r = 1; r <= slen; r++) {
		for (int c = 1; c <= slen; c++) {
			if (s[r] == ss[c]) dp[r][c] = dp[r - 1][c - 1] + 1;
			else dp[r][c] = max(dp[r - 1][c], dp[r][c - 1]);
		}
	}

	cout << slen - dp[slen][slen];
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 17295 // C++] 엔드게임 스포일러  (0) 2022.07.31
[BOJ 2302 // C++] 극장 좌석  (0) 2022.07.31
[BOJ 5958 // C++] Space Exploration  (0) 2022.07.31
[BOJ 2304 // C++] 창고 다각형  (0) 2022.07.31
[BOJ 1254 // C++] 팰린드롬 만들기  (0) 2022.07.31

+ Recent posts