Logo냥냠감자기술 블로그
Skip to Content
AlgorithmDP (31)팰린드롬 개수 구하기
작성일: 2024-01-19

문제

백준 14505 - 팰린드롬 개수 구하기 

  • 난이도: 골드3
  • 알고리즘: DP

코드

#include <iostream> #include <vector> using namespace std; vector<vector<int> > cache(30, vector<int>(30, -1)); int getCaseNum(int leftMid, int rightMid, string& str) { if(str[leftMid]!=str[rightMid]) return cache[leftMid][rightMid]=0; if(cache[leftMid][rightMid]!=-1) return cache[leftMid][rightMid]; int ret=1; for(int left=leftMid-1; left>=0; left--) { for(int right=rightMid+1; right<str.size(); right++) { ret+=getCaseNum(left, right, str); } } return cache[leftMid][rightMid]=ret; } int main() { int ret=0; string str; cin>>str; for(int i=0; i<str.size(); i++) { for(int j=i; j<str.size(); j++) { ret+=getCaseNum(i, j, str); } } cout<<ret; }

회고

부분 수열이 원 수열에서 연속된 숫자들의 집합인 줄 알고 large 버전을 풀었다 오답이 나서 일단 small 버전을 풀러 왔다.
일단 small 버전은 무난하게 풀렸는데, large 버전에 다시 도전해 봐야 겠다.