[BOJ] 10942. ํŒฐ๋ฆฐ๋“œ๋กฌ? (๐Ÿฅ‡, DP)

lemythe423ยท2024๋…„ 2์›” 24์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
115/133
post-thumbnail

๐Ÿ”—

ํ’€์ด

์งˆ๋ฌธ์˜ ๊ฐœ์ˆ˜๋Š” ์ตœ๋Œ€ ๋ฐฑ๋งŒ์ด๊ณ  ์ˆ˜์—ด์˜ ํฌ๊ธฐ๊ฐ€ 2000์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์งˆ๋ฌธ์— ๋Œ€ํ•ด์„œ ๋งค๋ฒˆ ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทœ์น™์„ ์ฐพ์•„์„œ S~E๊นŒ์ง€ ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€๋ฅผ ํ•œ ๋ฒˆ์— ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฏธ๋ฆฌ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ํ†ตํ•ด ์ €์žฅํ•ด๋‘ฌ์•ผ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ.

ํŒฐ๋ฆฐ๋“œ๋กฌ์€ ๊ฐ€์šด๋ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์–‘์˜†์ด ๋™์ผํ•œ ๊ท ํ˜•์„ ์ด๋ฃจ๋Š” ํ˜•ํƒœ๋ฅผ ๋งํ•˜๋Š”๋ฐ, ํŒฐ๋ฆฐ๋“œ๋กฌ์ด ๋  ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด์„ ์ž˜ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๊ฐ€์šด๋ฐ๊ฐ€ ๋™์ผํ•  ๋•Œ ์–‘๋์ด ๊ณ„์† ๋™์ผํ•œ ํ˜•ํƒœ๋กœ ํ™•์žฅ๋˜์–ด ๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค. ์ •๋ฆฌํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. ์–‘๋์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„(๊ฐ€์šด๋ฐ)์ด ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๋‹ค
  2. ์–‘๋์ด ๋™์ผํ•˜๋‹ค.

๋‘ ๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋Š” ํ˜•ํƒœ๋Š” ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค. ์ด์™ธ์—๋„ ๋‹ค๋ฅธ ์กฐ๊ฑด์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ์–ด์จŒ๋“  ์ด ๋‘ ๊ฐ€์ง€ ์กฐ๊ฑด์„ ํฌ๊ฒŒ ๋ฒ—์–ด๋‚˜์ง€๋Š” ์•Š๋Š”๋‹ค. ๊ฐ€์žฅ ์ฒ˜์Œ a์˜ ์œ„์น˜๋ฅผ S๋ผ๊ณ  ํ•˜๊ณ  ๋งˆ์ง€๋ง‰ a์˜ ์œ„์น˜๋ฅผ E๋ผ๊ณ  ํ–ˆ์„ ๋•Œ ๊ฐ€์šด๋ฐ ๋ถ€๋ถ„์€ S+1 ~ E-1๊นŒ์ง€๊ฐ€ ๋œ๋‹ค. ๊ฒฐ๊ตญ ์–ด๋–ค ์ˆ˜์—ด์—์„œ S~E๊ฐ€ ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ์•„๋ž˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค.

  1. S+1 ~ E-1๊นŒ์ง€๊ฐ€ ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๊ณ 
  2. S์™€ E์˜ ๊ฐ’์ด ๋™์ผํ•  ๋•Œ

dp[S][E]๋ฅผ S~E๊ฐ€ ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ์ €์žฅํ•œ๋‹ค๊ณ  ํ•  ๋•Œ, ์ ํ™”์‹์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

if (dp[S+1][E-1] == 1 && numbers[S] == numbers[E]) {
	dp[S][E] = 1;
}

์ฐธ๊ณ ๋กœ S์™€ E๊ฐ€ 1๋ฐ–์— ์ฐจ์ด๋‚˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋Š” ๊ฐ€์šด๋ฐ๋ฅผ ๋น„๊ตํ•  ํ•„์š” ์—†์ด S์™€ E๋งŒ ๊ฐ™๋‹ค๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ์ด๋ฃฌ๋‹ค. S=E์ธ ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค. ์ด ๋‘ ๊ฐ’์— ๋Œ€ํ•ด์„œ๋Š” ๋ฏธ๋ฆฌ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

import java.util.*;
import java.io.*;

public class Main {
    static int[] numbers;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        numbers = new int[N+1];
        numbers[0] = -1;
        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 1; i <= N; i++) {
            numbers[i] = Integer.parseInt(st.nextToken());
        }

        int[][] dp = new int[N+1][N+1];
        for (int j = 1; j <= N; j++) {
            dp[j][j] = 1;
            if (numbers[j] == numbers[j-1]) {
                dp[j-1][j] = 1;
            }

            for (int i = 1; i < j - 1; i++) {
                if (numbers[i] == numbers[j] && dp[i+1][j-1] == 1) {
                    dp[i][j] = 1;
                }
            }
        }

        int M = Integer.parseInt(br.readLine());
        int S; int E;
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());
            S = Integer.parseInt(st.nextToken());
            E = Integer.parseInt(st.nextToken());
            sb.append(dp[S][E] + "\n");
        }
        System.out.println(sb);
    }
}
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€