상상쓰

[백준] 가장 긴 증가하는 부분 수열 본문

Coding Test

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

상상쓰 2021. 10. 4. 09:59

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

 

dp[i] = i 를 마지막 원소로 가지는 증가하는 부분 수열의 길이

A[i] > A[j] (단, j = 0,1,2, ..., i-1) 일 경우 dp[j] + 1 중 가장 큰 값을 dp[i] 로 설정한다. 

dp 의 최댓값을 반환하면 된다.

 

import sys

N = int(sys.stdin.readline())
A = list(map(int, sys.stdin.readline().split()))
dp = [0] * N
answer = 0

for i in range(N):
    val = 0
    
    for j in range(i):
        if A[i] > A[j]:
            val = max(val, dp[j])
    
    dp[i] = val + 1
    answer = max(answer, dp[i])

print(answer)

'Coding Test' 카테고리의 다른 글

[백준] 5의 수난  (0) 2021.10.06
[프로그래머스] 9주차_전력망을 둘로 나누기  (0) 2021.10.05
[백준] 라면 사기 (Small)  (2) 2021.10.01
[프로그래머스] 방의 개수  (0) 2021.09.30
[백준] 배  (0) 2021.09.29
Comments