수열의 길이는 최대 10^5 -> int
수열의 원소 크기는 최대 10^9 -> long
출력은 딱 한개만 나오니까 system.out.println을 써도 될 것 같다.
증가하는 팰린드롬 수열이기 때문에 오히려 탐색이 간단하다.
투 포인터를 이용해서 start는 탐색 시작 위치에, end는 탐색 종료 위치에 둔다.
import java.util.*;
import java.io.*;
public class Main {
private static int N = 0;
private static int maxLen = 1;
private static int localLen = 0;
private static int start = 0;
private static int end = 0;
private static long[] arr;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
arr = new long[N];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i=0; i<N; i++){
arr[i] =Long.parseLong(st.nextToken());
}
while (start <= end && end < N - 1) {
if (arr[end] < arr[end + 1]) {
end++;
} else if (arr[end] == arr[end + 1]) {
isEvenPalindrome();
maxLen = Math.max(maxLen, 2 * localLen);
start = end + 1;
end++;
} else {
isOddPalindrome();
maxLen = Math.max(maxLen, 2 * localLen + 1);
start = end + 1;
end += 1;
}
}
System.out.println(maxLen);
}
public static void isEvenPalindrome(){
for (localLen = 0; localLen <= end - start; localLen++) {
if (end + 1 + localLen >= N || arr[end - localLen] != arr[end + 1 + localLen]) {
break;
}
}
}
public static void isOddPalindrome(){
for (localLen = 0; localLen <end - start; localLen++) {
if (end + 1 + localLen >= N || arr[end - 1 - localLen] != arr[end + 1 + localLen]) {
break;
}
}
}
}
import java.util.*;
import java.io.*;
public class Main {
private static int N = 0;
private static int maxLen = 1;
private static int localLen = 0;
private static int start = 0;
private static int end = 0;
private static long[] arr;
private static ArrayList<Long> list;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
list = new ArrayList<Long>(N*2);
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i=0; i<N; i++){
list.add(Long.parseLong(st.nextToken()));
}
while (start <= end && end < N - 1) {
try{
if (list.get(end) < list.get(end + 1)) {
end++;
} else if (list.get(end).equals(list.get(end + 1))) {
isEvenPalindrome();
maxLen = Math.max(maxLen, 2 * localLen);
start = end + 1;
end++;
} else {
isOddPalindrome();
maxLen = Math.max(maxLen, 2 * localLen + 1);
start = end + 1;
end += 1;
}
}catch(Exception e){
break;
}
}
System.out.println(maxLen);
}
public static void isEvenPalindrome(){
try{
for (localLen = 0; localLen <= end - start; localLen++) {
if (end + localLen > N || !(list.get(end - localLen).equals(list.get(end + 1 + localLen)))) {
break;
}
}
}catch(Exception e){
return;
}
}
public static void isOddPalindrome(){
try{
for (localLen = 0; localLen <end - start; localLen++) {
if (end + localLen > N || !(list.get(end - 1 - localLen).equals(list.get(end + 1 + localLen)))) {
break;
}
}
}catch(Exception e){
return;
}
}
}
==
이 아니라 equals
로 값을 비교해줘야 한다.