https://www.acmicpc.net/problem/11053
이 문제는 주어진 수열에서 가장 긴 증가하는 부분 수열의 길이를 출력하는 문제이다.
예를 들어 [10,20,10,30,40] 이란 수열이 있다면 이중 가장 긴 증가하는 부분수열은 [10,20,30,40]으로 길이가 4이다. 이 문제는 다이나믹 프로그래밍을 이용하여 풀 수 있다. 수열 위를 훑어가며 지금 이 인덱스에서 가장 길게 형성된 수열을 자신의 앞에서 찾으며 더 이어갈 수 있는지를 체크하며 풀면 된다.
def lgis(seq,l):
p = [-1] * l #거리
for i in range(l):
for j in range(i):
if seq[j] < seq[i] and p[j]+1 > p[i]:#증가하고, 더 길다면
p[i] = p[j]+1
return max(p)+2
N=int(input())
A = list(map(int,input().split()))
print(lgis(A,N))
'문제해결(PS) > 백준(BOJ)' 카테고리의 다른 글
백준 15663 N과 M (9) (0) | 2024.12.25 |
---|---|
백준 11725 트리의 부모 찾기 (0) | 2024.12.25 |
백준 15654 N과 M (5) (0) | 2024.12.22 |
백준 16928 뱀과 사다리 게임 (1) | 2024.05.01 |
백준 20529 가장 가까운 세 사람의 심리적 거리 파이썬 (2) | 2024.04.18 |