백준 2491번: 수열

최창효·2022년 2월 24일
post-thumbnail


문제 설명

  • 가장 긴 증가하거나 감소하는 (변하지 않은 경우도 포함)구간의 길이가 얼마인지 구하는 문제입니다.

접근법

  • N이 최대 100,000이기 때문에 2중반복문은 불가능합니다.
    • 대신 N번짜리 반복문을 여러개 쓰는 건 가능합니다.
  • 오름차순 검사와 내림차순 검사를 각각 실행했습니다.
    • 단순하게 생각하는게 더 좋았던 문제입니다.
  • N이 1일때 예외적인 처리가 필요합니다.

정답

import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int[] Arr = new int[N];
		for (int i = 0; i < N; i++) {
			Arr[i] = sc.nextInt();
		}
		
		int answer = 0;
		int cnt = 0;
		
		//N-1로 검사하기 때문에 N==1일때의 처리가 필요합니다.
		if(N==1) {
			System.out.println(1);
			System.exit(0);
		}
		
		//오름차순 검사
		for (int i = 0; i < N-1; i++) {
			if(Arr[i] <= Arr[i+1]) cnt++;
			if(Arr[i]> Arr[i+1]) {
				cnt++;
				answer = Math.max(answer, cnt);
				cnt = 0;
			}
			if(i == N-2) {
				cnt++;
				answer = Math.max(answer, cnt);
				cnt = 0;
			}
		}

		// 내림차순 검사
		for (int i = 0; i < N-1; i++) {
			if(Arr[i] >= Arr[i+1]) cnt++;
			if(Arr[i] < Arr[i+1]) {
				cnt++;
				answer = Math.max(answer, cnt);
				cnt = 0;
			}
			if(i == N-2) {
				cnt++;
				answer = Math.max(answer, cnt);
				cnt = 0;
			}
		}		
		System.out.println(answer);
	}
}
profile
기록하고 정리하는 걸 좋아하는 백엔드 개발자입니다.

0개의 댓글