[BOJ 2491] 수열
업데이트:
문제
- BOJ 2491
- 문제의 저작권은 Baekjoon Online Judge에 있습니다.
접근방식
for문을 2개 돌릴 필요 없이 증가하는 경우, 감소하는 경우 두가지로 나누어 계산해서 각각에서 구할수 있는 수열의 최대 길이를 구하면 된다. 2중 for문을 사용하는 경우 시간초과 발생함!!
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
static int[] arr;
static int Ans;
static int mode;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
arr = new int[N];
Ans = 1;
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++)
arr[i] = Integer.parseInt(st.nextToken());
int cnt = 1;
// 증가하는 경우
for (int i = 0; i < N - 1; i++) {
if(arr[i] <= arr[i+1]) cnt++;
else {
Ans = Math.max(cnt, Ans);
cnt = 1;
}
}
Ans = Math.max(cnt, Ans);
cnt = 1;
// 감소하는 경우
for (int i = 0; i < N-1; i++) {
if(arr[i] >= arr[i+1]) cnt++;
else {
Ans = Math.max(cnt, Ans);
cnt = 1;
}
}
Ans = Math.max(cnt, Ans);
bw.write(Ans + "");
bw.flush();
br.close();
bw.close();
}
}