Compy's Blog
305 words
2 minutes
[BOJ] 팰린드롬?
2025-02-11

팰린드롬?

TimeLimitMemoryLimitConditionTAG
0.5s256MB(1≤ N ≤ 2,000
1 ≤ M ≤ 1,000,000)
Dynamic Programming

일단 문제 자체가 최적화를 좀 해야된다는 생각을 만들게 하는 TimeLimit였다. 그런데 점화식 세우는게 어려운 문제가 아니였고, 사실 디게 직관적인 문제여서 금방 풀었던 것 같다.

문제의 경우 그냥 자기 자신, 그리고 바로 2개씩 묶을 때 가능한 친구들 전처리하고, 이후에 바로 다 미리 전부 얻어둔 후에 입력으로 dp array에서 바로 빼오면 되는 문제다.

정답 코드
#include <iostream>
using namespace std;

using ll = long long;
int n, m;


int board[2001];
bool dp[2001][2001];

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    
    cin >> n;
    for(int i = 0; i < n; i++) cin >> board[i];
    
    
    // 2개씩 미리 해놓고, 다음에 차차 bottom up으로 처리하면 자동으로 다 dp 처리됨.
    
    for(int i = 1; i < n; i++){
        dp[i-1][i] = board[i] == board[i-1];
        dp[i-1][i-1] = 1;
        dp[i][i] = 1;
    }
    
    for(int i = 2; i < n; i++){
        for(int j = 0; j < n-i; j++){
            if(board[j] != board[i+j]) continue;
            dp[j][j+i] = dp[j+1][j+i-1];
        }
    }
    
    
    cin >> m;
    int a, b;
    for(int i = 0; i < m; i++){
        cin >> a >> b;
        
        cout << (dp[a-1][b-1] || dp[b-1][a-1]) << "\n";
    }
    return 0;
}
// 1 2 1 3 1 2 1

[BOJ] 팰린드롬?
https://compy07.github.io/Blog/posts/boj/10942/
Author
뒹굴뒹굴 이정훈 공부방
Published at
2025-02-11