백준 11053번 "가장 긴 증가하는 부분 수열"

sanha_OvO·2021년 3월 24일
0

Algorithm

목록 보기
3/84

문제

백준 11053번 가장 긴 증가하는 부분수열

풀이

'LIS'
동적 계획법을 이용해 풀어야 한다.

수열을 순차적으로 반복하여 현재 순서의 숫자와 앞 숫자들을 비교하여 현재 숫자의 k값(현재 숫자가 부분 수열에 들어갈 때 순서)을 수정해나가야 한다.

ex) arr = [10, 20, 10, 30, 20, 50] 일 경우
i값이 증가할 때 마다 k배열은 다음과 같이 변한다.

Python 코드

import sys

input = sys.stdin.readline

n = int(input())
arr = list(map(int, input().split()))
k = [1]*n

for i in range(1, n):
    for j in range(i):
        if arr[j] < arr[i]:
            k[i] = max(k[i], k[j]+1)

print(max(k))
profile
Web Developer / Composer

0개의 댓글