https://www.acmicpc.net/problem/11054
11054번: 가장 긴 바이토닉 부분 수열
첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000)
www.acmicpc.net
풀이
문제를 보았을때 알수있는 힌트
문제를 이해하면 좀 쉽게 풀리는 문제인데. dp 문제로 길게 증가하는 dp1와 감소하는 dp2두개를 만들어서 그 둘을 합치고 겹치는 구간 1을 빼면 쉽게 풀리는 문제이다.
dp2를 구하기 위해서 list를 역순으로 뒤집어서 쉽게 계산했다. 나온 결과를 다시 reverse 시키고 dp1과 더하면 끝이 난다.
import sys
input= sys.stdin.readline
n= int(input())
n_list=list(map(int,input().split()))
# print(max_list)
result=[]
dp1=[1 for _ in range(n)]
dp2=[1 for _ in range(n)]
for i in range(n):
for j in range(i):
if n_list[i]>n_list[j]:
dp1[i] = max(dp1[i],dp1[j]+1)
n_list.reverse()
for i in range(n):
for j in range(i):
if n_list[i]>n_list[j]:
dp2[i] = max(dp2[i],dp2[j]+1)
dp2.reverse()
for i in range(n):
result.append(dp1[i]+dp2[i])
print(max(result)-1)
https://github.com/dydwkd486/coding_test/blob/main/baekjoon/baekjoon11054.py
GitHub - dydwkd486/coding_test: 코딩테스트 공부한 내용 정리
코딩테스트 공부한 내용 정리. Contribute to dydwkd486/coding_test development by creating an account on GitHub.
github.com
'Coding Test > baekjoon' 카테고리의 다른 글
[백준 9935] 문자열 폭발 - python (solved.ac - 골드 4) (0) | 2022.05.09 |
---|---|
[백준 2470] 두 용액 - python (solved.ac - 골드 5) (0) | 2022.05.05 |
[백준 11722] 가장 긴 감소하는 부분 수열- python (solved.ac - 실버 2) (0) | 2022.05.05 |
[백준 2660] 회장 뽑기- python (solved.ac - 골드 5) (0) | 2022.05.03 |
[백준 2225] 정수 삼각형- python (solved.ac - 골드 5) (0) | 2022.05.02 |