N개의 자연수, M개의 질문
질문은 S E 형태. S번째 수부터 E번째 까지 수가 팰린드롬을 이루는가? → 이루면 1 아니면 0
(1≤N≤2,000, 자연수 ≤ 100,000, 1≤ M ≤ 1,000,000)
M개의 질문에 대해 매번 팰린드롬 여부를 판단하는 것은 시간초과이다.
답을 구해 놓고 쿼리를 순회하며 답을 출력해야 할 것 같다.
package boj;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class BOJ10942 {
static int N, M;
static int[] nums;
static int[][] queries;
static FastReader scan = new FastReader();
static boolean[][] dp;
static void input() {
N = scan.nextInt();
nums = new int[N];
for (int i = 0; i < N; i++) {
nums[i] = scan.nextInt();
}
M = scan.nextInt();
queries = new int[M][2];
for (int i = 0; i < M; i++) {
queries[i] = new int[]{scan.nextInt(), scan.nextInt()};
}
dp = new boolean[N][N];
}
static void solve() {
for (int s = 0; s < N; s++) {
// 홀수개 팰린드롬
checkPalindrome(s, s);
// 짝수개 팰린드롬
checkPalindrome(s, s + 1);
}
StringBuilder sb = new StringBuilder();
for (int[] query : queries) {
int s = query[0] - 1;
int e = query[1] - 1;
boolean result = dp[s][e];
sb.append(result == true ? 1 : 0).append("\\n");
}
System.out.println(sb);
}
static void checkPalindrome(int l, int r) {
while (l >= 0 && r < N) {
if (nums[l] == nums[r]) {
dp[l][r] = true;
l--;
r++;
} else {
return;
}
}
}
public static void main(String[] args) {
input();
solve();
}
static class FastReader {
BufferedReader br;
StringTokenizer st;
public FastReader() {
br = new BufferedReader(new InputStreamReader(System.in));
}
String next() {
while (st == null || !st.hasMoreElements()) {
try {
st = new StringTokenizer(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
long nextLong() {
return Long.parseLong(next());
}
String nextLine() {
String str = "";
try {
str = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return str;
}
}
}
'Algorithm > BOJ' 카테고리의 다른 글
BOJ 4991 - 로봇 청소기 (0) | 2024.11.11 |
---|---|
BOJ 11049 - 행렬 곱셈 순서 (1) | 2024.11.09 |
BOJ 6087 - 레이저 통신 (0) | 2024.11.07 |
BOJ 10021 - Watering the Fields (0) | 2024.11.06 |
BOJ 2292 - 벌집 (5) | 2024.11.06 |