import sys
input = sys.stdin.readline
def BOJ11054() :
n = int(input())
l = list(map(int, input().split()))
dp_up = [1 for _ in range(n)]
dp_down = [1 for _ in range(n)]
for i in range(n) :
for j in range(i) :
if l[i] > l[j] :
dp_up[i] = max(dp_up[i], dp_up[j]+1)
for i in range(n-1, -1, -1):
for j in range(n-1, i-1, -1):
if l[i] > l[j]:
dp_down[i] = max(dp_down[i], dp_down[j]+1)
dp = []
for up, down in zip(dp_up, dp_down) :
dp.append(up + down - 1)
print(max(dp))
BOJ11054()
접근 방법 :
1. 배열 두개를 생성해 주었다.
- 시작점에서부터 점점 커져가는 배열
- 끝점에서부터 점점 작아지는 배열
2. 두개의 배열을 가지고 각 점에서 가지는 값들을 더해준다. 그리고 -1을 해주면 바이토닉 부분 수열의 길이를 알수있다.
3. dp 배열중 최댓값을 출력해주면 끝
https://www.acmicpc.net/problem/11054
11054번: 가장 긴 바이토닉 부분 수열
첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000)
www.acmicpc.net
'알고리즘' 카테고리의 다른 글
양팔저울 [백준 2629] - python (0) | 2022.03.18 |
---|---|
전깃줄 [백준 2565] - python (0) | 2022.03.17 |
팰린드롬? [백준 10942] - python (0) | 2022.03.15 |
내리막 길[백준 1520] - python (0) | 2022.03.14 |
가장 긴 감소하는 부분 수열 [백준 11722] - python (0) | 2022.03.13 |