https://www.acmicpc.net/problem/11053
11053번: 가장 긴 증가하는 부분 수열
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이
www.acmicpc.net
풀이 과정
D[i] => A[i]를 마지막으로 하는 가장 긴 증가하는 부분 수열의 길이라고 하면,
이렇게 A[i]에 따른 D[i]를 고려해볼 수 있으며,
D[i] = max(D[J]) + 1 (j < i, A[j] < A[i]) 이 성립함을 알 수 있다.
소스 코드
import sys
N = int(sys.stdin.readline())
A = list(map(int, sys.stdin.readline().split()))
A.insert(0, 0)
d = [1 for _ in range(len(A))]
for i in range(2, len(A)):
checkMaxLength = 0
for j in range(1, i):
if A[j] < A[i]:
checkMaxLength = max(checkMaxLength, d[j])
d[i] = checkMaxLength + 1
print(max(d))
'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글
백준 1912 - 연속합 [파이썬] (0) | 2022.04.20 |
---|---|
백준 14002 - 가장 긴 증가하는 부분 수열 4 [파이썬] (0) | 2022.04.20 |
백준 2193 - 이친수 [파이썬] (0) | 2022.04.20 |
백준 10844 - 쉬운 계단 수 [파이썬] (0) | 2022.04.20 |
백준 15990 - 1, 2, 3 더하기 5 [파이썬] (0) | 2022.04.20 |