BOJ_10942_팰린드롬?_java

2023. 1. 24. 11:24Algorithm/BOJ

728x90

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

 

10942번: 팰린드롬?

총 M개의 줄에 걸쳐 홍준이의 질문에 대한 명우의 답을 입력으로 주어진 순서에 따라서 출력한다. 팰린드롬인 경우에는 1, 아닌 경우에는 0을 출력한다.

www.acmicpc.net

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

/**
 백준 10942번 팰린드롬?
 골드 4
 */
public class BOJ_10942_팰린드롬 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();
        int N = Integer.parseInt(br.readLine());

        int[] nums = new int[N+1];
        st = new StringTokenizer(br.readLine());

        for (int i = 1; i<= N; i++){
            nums[i] = Integer.parseInt(st.nextToken());
        }

        int[][] dp = new int[N+1][N+1];
        for (int i = 1; i<=N; i++){ // 길이가 1인 경우는 항상 팰린드롬
            dp[i][i] = 1;
        }
        for (int i = 1; i<N; i++){
            if (nums[i] == nums[i+1]) // 길이가 2인 경우는 2개가 같은 경우 팰린드롬
                dp[i][i+1] = 1;
        }
        for (int i = 2; i<N; i++){
            for (int j = 1; j<=N-i; j++){ // 길이가 3 이상인 경우들 (j : 시작점, j+i : 끝점)
                if (nums[j] == nums[j+i] && dp[j+1][j+i-1] == 1){ //시작점 = 끝점, 시작점-1 ~ 끝점 -1 = 팰린드롬
                    dp[j][j+i] = 1;
                }
            }
        }

        int M = Integer.parseInt(br.readLine());

        for (int i = 0; i< M; i++){
            st = new StringTokenizer(br.readLine());
            int S = Integer.parseInt(st.nextToken());
            int E = Integer.parseInt(st.nextToken());
            sb.append(dp[S][E]).append("\n");
        }

        System.out.println(sb.toString());


    }
}

'Algorithm > BOJ' 카테고리의 다른 글

BOJ_20040_사이클게임_java  (0) 2023.01.30
BOJ_17404_RGB거리 2_java  (0) 2023.01.24
BOJ_17427_약수의 합 2_java  (0) 2023.01.14
BOJ_9252_LCS 2_java  (0) 2023.01.13
BOJ_1806_부분합_java  (0) 2023.01.12