반응형
[ Contents ]
1. 문제 (링크 참조)
2. 문제 풀이
가장 길게 감소하는 부분 수열을 찾는 문제입니다. 중간에 이전 원소보다 큰 원소가 나와도, 무시하고 진행할 수 있습니다.
1030 51025 10
예를 들어, 위 수열은 [30, 25, 10]이 가장 긴 감소수열입니다.
2022.04.12 - [Algorithm] - [DP/동적계획법] 백준 11053 가장 긴 증가하는 부분 수열 - 파이썬(Python)
위 문제와 정반대로, 가장 긴 감소 수열을 구해야 합니다. 감소 수열 역시, DP를 이용해서 i번째까지의 가장 긴 감소수열을 구해야, N번째까지의 가장 긴 감소수열을 효율적으로 계산할 수 있습니다.
3. 코드
#입력
N = int(input())
A = list(map(int, input().split()))
#DP
cache = [1]*N
for i in range(N):
for j in range(i):
# 더 큰 이전 원소 발견
if A[i] < A[j]:
# 이전 원소에 +1한 게 더 길면 갱신
cache[i] = max(cache[i], cache[j]+1)
print(max(cache))
'i번째 원소까지의 가장 긴 감소수열의 길이'는 'i번째 원소보다 큰 이전 원소의 감소수열 길이 +1'로 갱신될 수 있습니다. DP를 이용해서 1 ~ N까지 차례차례 구해줍니다.
반응형
'Algorithm' 카테고리의 다른 글
[DP/동적계획법] 백준 11054 가장 긴 바이토닉 부분 수열 - 파이썬(Python) (0) | 2022.04.16 |
---|---|
[DP/동적계획법] 백준 14002 가장 긴 증가하는 부분 수열 4 - 파이썬(Python) (0) | 2022.04.15 |
[DP/동적계획법] 백준 11055 가장 큰 증가 부분 수열 - 파이썬(Python) (0) | 2022.04.13 |
[DP/동적계획법] 백준 11053 가장 긴 증가하는 부분 수열 - 파이썬(Python) (0) | 2022.04.12 |
[Brute Force] 백준 15665 N과 M (11) - 파이썬(Python) (0) | 2022.04.11 |
댓글