λ°μ΄ν λ λΆλΆμμ΄μ κΈΈμ΄λ₯Ό ꡬνκΈ° μν΄μλ,
μ΄λ€ μΈλ±μ€μ μμΉν μλ₯Ό κΈ°μ€μΌλ‘ μμμλΆν° μμνλ κ°μ₯ κΈ΄ μ¦κ°νλ λΆλΆμμ΄μ κΈΈμ΄μ
λ€μμλΆν° μμνλ κ°μ₯ κΈ΄ λΆλΆμμ΄μ κΈΈμ΄λ₯Ό μμμΌκ² λ€ μκ°μ΄ λ€μλ€.
μ리λ μ λ¬Έμ μ λμΌνλ€.
λμ μμμ λΆν° μμνλ μ¦κ° λΆλΆμμ΄μ κΈ°λ‘ν΄λμ dpAscλ°°μ΄κ³Ό λ€μμ λΆν° μμνλ μ¦κ° λΆλΆμμ΄μ κΈ°λ‘ν΄λμ dpDsc λκ°μ dpλ°°μ΄μ μμ±νμλ€.
κ·Έλ¦¬κ³ dpAscμ dpDscμ κ°μ μΈλ±μ€ κ°μ ν©μμ ν΄λΉ μΈλ±μ€κ°μ μ€λ³΅μ΄ λκΈ° λλ¬Έμ, 1μ λΊ κ°μ΄ λ°μ΄ν λ λΆλΆμμ΄μ κΈΈμ΄κ° λλ€.
μ κ·Έλ¦Όμ 보면 μ΄ν΄νκΈ° μ¬μΈ κ²μ΄λ€.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.valueOf(br.readLine());
int[] dpAsc = new int[N + 1];
int[] dpDsc = new int[N + 1];
int[] dpTotal = new int[N + 1];
int[] array = new int[N + 1];
String[] input = br.readLine().split(" ");
for (int i = 0; i < input.length; i++) {
array[i + 1] = Integer.valueOf(input[i]);
dpAsc[i+1]=1;
dpDsc[i+1]=1;
}
for(int i=1;i<=N;i++) {
for(int j=1;j<i;j++) {
if(array[i]>array[j] && dpAsc[i]<dpAsc[j]+1) {
dpAsc[i]=dpAsc[j]+1;
}
if(array[N+1-i]>array[N+1-j] && dpDsc[N+1-i]<dpDsc[N+1-j]+1) {
dpDsc[N+1-i]=dpDsc[N+1-j]+1;
}
}
}
for(int i=1;i<=N;i++) {
dpTotal[i]=dpAsc[i]+dpDsc[i]-1;
}
// System.out.println(Arrays.toString(array));
// System.out.println(Arrays.toString(dpAsc));
// System.out.println(Arrays.toString(dpDsc));
// System.out.println(Arrays.toString(dpTotal));
Arrays.sort(dpTotal);
System.out.println(dpTotal[N]);
}
}