์ง๋ฌธ์ ๊ฐ์๋ ์ต๋ ๋ฐฑ๋ง์ด๊ณ ์์ด์ ํฌ๊ธฐ๊ฐ 2000์ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์ง๋ฌธ์ ๋ํด์ ๋งค๋ฒ ํฐ๋ฆฐ๋๋กฌ์ธ์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ฉด ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๊ทธ๋์ ๊ท์น์ ์ฐพ์์ S~E๊น์ง ํฐ๋ฆฐ๋๋กฌ์ธ์ง๋ฅผ ํ ๋ฒ์ ํ์ธํ ์ ์๋๋ก ๋ฏธ๋ฆฌ ๋ฉ๋ชจ์ด์ ์ด์ ์ ํตํด ์ ์ฅํด๋ฌ์ผ ํ ์ ์๋ ๋ฌธ์ .
ํฐ๋ฆฐ๋๋กฌ์ ๊ฐ์ด๋ฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ์์์ด ๋์ผํ ๊ท ํ์ ์ด๋ฃจ๋ ํํ๋ฅผ ๋งํ๋๋ฐ, ํฐ๋ฆฐ๋๋กฌ์ด ๋ ์ ์๋ ์กฐ๊ฑด์ ์ ์๊ฐํด๋ณด๋ฉด ๊ฐ์ด๋ฐ๊ฐ ๋์ผํ ๋ ์๋์ด ๊ณ์ ๋์ผํ ํํ๋ก ํ์ฅ๋์ด ๋๊ฐ๋ ๊ฒ์ด๋ค. ์ ๋ฆฌํ๋ฉด ์๋์ ๊ฐ๋ค.
- ์๋์ ์ ์ธํ ๋๋จธ์ง ๋ถ๋ถ(๊ฐ์ด๋ฐ)์ด ํฐ๋ฆฐ๋๋กฌ์ด๋ค
- ์๋์ด ๋์ผํ๋ค.
๋ ๊ฐ์ง ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ๋ ํํ๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค. ์ด์ธ์๋ ๋ค๋ฅธ ์กฐ๊ฑด์ด ์์ ์ ์๊ฒ ์ง๋ง ์ด์จ๋ ์ด ๋ ๊ฐ์ง ์กฐ๊ฑด์ ํฌ๊ฒ ๋ฒ์ด๋์ง๋ ์๋๋ค. ๊ฐ์ฅ ์ฒ์ a์ ์์น๋ฅผ S๋ผ๊ณ ํ๊ณ ๋ง์ง๋ง a์ ์์น๋ฅผ E๋ผ๊ณ ํ์ ๋ ๊ฐ์ด๋ฐ ๋ถ๋ถ์ S+1 ~ E-1๊น์ง๊ฐ ๋๋ค. ๊ฒฐ๊ตญ ์ด๋ค ์์ด์์ S~E๊ฐ ํฐ๋ฆฐ๋๋กฌ์ธ์ง๋ฅผ ํ์ธํ๋ ค๋ฉด ์๋ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค.
- S+1 ~ E-1๊น์ง๊ฐ ํฐ๋ฆฐ๋๋กฌ์ด๊ณ
- 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);
}
}