[백준] 가장 긴 증가하는 부분 수열(LIS)
문제
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.
예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.
입력제한
- N (1 ≤ N ≤ 1,000)
- 1 ≤ Ai ≤ 1,000
출력
수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다.
풀이
- 증가하는 수열은 입력받은 Ai 배열 순서대로 진행해야 한다. (문제설명이 조금 더 디테일 했으면 좋겠다.)
- (i-1) 부터 (i) 원소까지 체크, 증가한다면 counting
- O(n2)
dp = [1] * n # {10}{20}.. 크기가 1인 원소는 size 디폴트 1
for i in range(1, n):
for j in range(0, i):
if array[j] < array[i]:
dp[i] = max(dp[i], dp[j] + 1)
print(max(dp))
dp 문제는 더 풀어봐야겠다
댓글남기기