황소개발자

백준 11054 python 파이썬 가장긴바이토닉수열 @@황소처럼 우직하게@@ 본문

백준 문제 풀이

백준 11054 python 파이썬 가장긴바이토닉수열 @@황소처럼 우직하게@@

hjp845 2020. 2. 20. 00:50
반응형
n = int(input())
lst = list(map(int, input().split()))
dp_left = [1] * n
dp_right = [1] * n


for i in range(n):
    for j in range(i):
        if lst[j] < lst[i]:
            if dp_left[i] < dp_left[j] + 1:
                dp_left[i] = dp_left[j] + 1

for i in range(n - 1, -1, -1):
    for j in range(n - 1, i, -1):
        if lst[j] < lst[i]:
            if dp_right[i] < dp_right[j] + 1:
                dp_right[i] = dp_right[j] + 1

dp = [dp_left[i] + dp_right[i] for i in range(n)]

print(max(dp) - 1)

해결 아이디어

왼쪽에서 최대 증가 수열 dp 만들고

오른쪽에서 최대 증가 수열 dp 만들고

그리고 둘이 합치고 1 빼준다.

반응형
Comments