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

게으른 완벽주의자·2023년 2월 19일

백준

목록 보기
16/27

백준_11053

유명한 dp 문제 유형 중 하나인 '가장 긴 증가하는 부분 수열(LIS)'
이번 기회에 LIS 유형을 모두 시도해볼까 한다
여러번 풀어도 풀이를 까먹으니.. 이번 기회에 제대로 이해하고 넘어가야지

그리고 마지막 print문에서 dp[n-1]를 해주면 틀린다. 예를 들어 10 20 50 10에서 답은 3이지만, 가장 마지막 자리를 print하면 1이 되기 때문이다.

n = int(input())
nums = list(map(int, input().split()))
dp = [0]*n

for i in range(n):
    for j in range(i):
        #i보다 작고 앞에 있는 숫자 중에서 가장 긴 길이 구하기
        if nums[i]>nums[j] and dp[i]<dp[j]:
            dp[i] = dp[j]
    #i 본인의 갯수 더하기
    dp[i]+=1
print(max(dp))
profile
데이터를 공부하고 있습니다

0개의 댓글