이번 문제는 다이나믹 프로그래밍을 통해 해결하였다. 이전의 값과 비교하여 dp를 갱신하며 그 중 최대값을 찾아 출력하였다. 처음에 문제를 제대로 읽지 않아서 앞<=뒤, 앞>=뒤 의 경우에 대한 dp를 모두 구현하지 않고 앞<=뒤에 대한 dp만 구현해서 오답 처리 당했다. 이 문제에 대한 점화식은 다음과 같다.
dp[n]=max(dp[n], dp[n-1]+1)
<=의 경우와 >=의 경우를 모두 구해야 하기 때문에 dp배열을 2차원으로 선언하고 dp[i][0]은 <=의 경우를, dp[i][1]은 >=의 경우를 저장하였다.
n=int(input())
arr=list(map(int, input().split()))
dp=[[1]*n for _ in range(2)]
for i in range(1,n):
if arr[i]>=arr[i-1]:
dp[0][i]=max(dp[0][i], dp[0][i-1]+1)
if arr[i]<=arr[i-1]:
dp[1][i]=max(dp[1][i], dp[1][i-1]+1)
print(max(max(dp[0]), max(dp[1])))