본문 바로가기
알고리즘 (Python)/백준

[백준 11053번][실버2] 가장 긴 증가하는 부분 수열 (파이썬)

by 근수짜세 2022. 8. 17.

문제출처

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


문제를 스스로 해결하였는가? -> X

한 번 풀었던 적 있는 문제다. 한번 푼 문제는 다시 안푸는 성격인데 11055번(가장 큰 증가 부분 수열)문제랑 거의 똑같아 보여서 복습할 겸 다시 풀었다. 근데 또 못풀었다... 비슷한 응용문제가 많은거 같은데 다음엔 까먹지 말고 제대로 풀자.  


사용되는 알고리즘

  • dp

풀이 전략

 다음과 같은 방식으로 dp값을 계산하면 된다. dp[i]는 0부터 i번째까지 배열 중 A[i]를 포함한 가장 긴 증가하는 부분 수열의 길이를 의미한다.


전체코드

n = int(input())
A = list(map(int, input().split(' ')))
dp = [1]*n
for i in range(n):
    tmp = []
    for j in range(i):
        if A[j] < A[i]:
            tmp.append(dp[j])
    if len(tmp)!=0:
        dp[i] = max(tmp) + 1
print(max(dp))

댓글