[Gold IV][JAVA]10942번: 팰린드롬?

호수·2023년 10월 7일
0

JAVA 알고리즘

목록 보기
41/67
post-thumbnail
post-custom-banner

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

펠린드롬이란 앞에서 읽든, 뒤에서 읽든 같은 단어를 말한다.
반복문을 돌면서 직접 비교할 수도 있지만 질문의 개수를 보면 1,000,000 으로 시간초과를 피해 다이나믹 프로그래밍으로 풀어야 한다. 

전체코드

package baekjoon_java.GoldIV;

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

public class 팰린드롬 {//팰린드롬? 10942번
    static int N;
    static int[] arr;
    static boolean check[][];


    public static void main(String[] arg) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        N = Integer.parseInt(br.readLine());
        arr = new int[N + 1];
        check = new boolean[N + 1][N + 1];

        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 1; i <= N; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }

        solve();

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

        for (int i = 1; i <= M; i++) {
            st = new StringTokenizer(br.readLine());

            int S = Integer.parseInt(st.nextToken());
            int E = Integer.parseInt(st.nextToken());

            if (check[S][E]) {
                sb.append(1 + "\n");
            } else {
                sb.append(0 + "\n");
            }
        }
        System.out.println(sb.toString());
    }

    public static void solve() {
        for (int i = 1; i <= N; i++) {
            check[i][i] = true;
        }
        for (int i = 1; i < N; i++) {
            if (arr[i] == arr[i + 1]) check[i][i + 1] = true;
        }
        for (int i = 2; i < N; i++) {
            for (int k = 1; k <= N - i; k++) {
                if (arr[k] == arr[k + i] && check[k + 1][k + i - 1]) {
                    check[k][k + i] = true;
                }
            }
        }
    }
}
profile
Back-End개발자 성장과정 블로그🚀
post-custom-banner

0개의 댓글