이 문제는 동적 계획법으로 푸는 문제인데 증가 뿐 아니라 감소하는 부분도 생각해줘야한다.
n = int(input())
arr = list(map(int, input().split()))
dp1 = [1 for _ in range(n)]
dp2 = [1 for _ in range(n)]
for i in range(1, len(arr)):
for j in range(i):
if arr[j] < arr[i]:
dp1[i] = max(dp1[i], dp1[j]+1)
for i in range(len(arr)-1, 0, -1):
for j in range(len(arr)-1, i, -1):
if arr[j] < arr[i]:
dp2[i] = max(dp2[i], dp2[j]+1)
dp = []
for i in range(len(arr)):
dp.append(dp1[i]+dp2[i])
print(max(dp)-1)
추가)
리스트 두개의 각 자리의 합을 새로운 리스트에 저장하는 방법을 한 줄의 코드로 구현하면 다음과 같다.
dp = [dp1[i]+dp2[i] for i in range(n)]