11053 - 가장 긴 증가하는 부분 수열
📌 문제
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.
예를 들어, 수열 A = 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.
📋 코드
N = int(input())
arr = list(map(int, input().split()))
dp = [1] * N
for i in range(N):
for j in range(i+1, N):
if arr[i] < arr[j]:
dp[j] = max(dp[j], dp[i] + 1)
print(max(dp))
💡 한마디
이 문제는 LIS
(Longest Increasing Subsequence), 즉 최장 증가 수열로 유명한 알고리즘이다. DP 테이블을 만들어서 뒤에 있는 값이 앞에 있는 값보다 큰 경우에만 테이블을 갱신해주면 된다.