반응형
코딩테스트 연습 - 가장 긴 팰린드롬
앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다. 문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요. 예를들
programmers.co.kr
dp[i][j]는 i~j 범위가 팰린드롬이라면 1, 그렇지 않다면 0입니다.
"abcba"가 있을때,
"c"가 팰린드롬이고, 양 옆에 문자 "b"가 같으므로 "bcb"는 팰린드롬입니다.
"bcb"가 팰린드롬이고, 양 옆에 문자 "a"가 같으므로 "abcba"는 팰린드롬입니다.
홀의 자릿수와 짝의 자릿수인 문자열의 팰린드롬 여부를 구하기 위해,
한 자릿수와 두 자릿수에 대한 팰린드롬을 먼저 구해준 뒤, 모든 팰린드롬 여부를 구해주었습니다.
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int solution(string s)
{
int answer = 1;
int dp[2500][2500] = {0};
for(int i=0; i<s.size(); i++) {
dp[i][i] = 1;
}
for(int i=0; i<s.size()-1; i++) {
if(s[i] == s[i+1]) {
dp[i][i+1] = 1;
answer = 2;
}
}
for(int i=2; i<s.size(); i++) {
for(int j=0; j<s.size() - i; j++) {
if(s[j] == s[j+i] && dp[j+1][j+i-1] == 1) {
dp[j][j+i] = 1;
answer = i+1;
}
}
}
return answer;
}
반응형
'Algorithm' 카테고리의 다른 글
프로그래머스 : 광고 삽입 (0) | 2021.11.14 |
---|---|
프로그래머스 : 기둥과 보 설치 (0) | 2021.11.14 |
프로그래머스 : 카드 짝 맞추기 (0) | 2021.11.14 |
프로그래머스 : 불량 사용자 (0) | 2021.11.14 |
프로그래머스 : 멀쩡한 사각형 (0) | 2021.11.13 |