티스토리 뷰

https://www.acmicpc.net/problem/11722

 

11722번: 가장 긴 감소하는 부분 수열

수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} 

www.acmicpc.net

해결한 코드는 간단하지만, dp를 떠올리는데 시간이 좀 걸렸다. 인덱스를 하나씩 늘려가며 그 이전의 값들을 검사하여 감소할 때, dp[i]와 dp[j]+1을 비교하여 더 큰 값을 넣는 방식으로 구현하였다. dp 공부를 더 해야겠다... 

# 가장 긴 감소하는 부분 수열
import sys
input = sys.stdin.readline

N = int(input())
A = list(map(int, input().split()))
dp = [0 for _ in range(N)]

for i in range(N):
    dp[i] = 1
    for j in range(i):
        if A[i] < A[j]:
            dp[i] = max(dp[i], dp[j]+1)

print(max(dp))

'PS > BOJ Python' 카테고리의 다른 글

1932번 - 정수 삼각형  (0) 2023.06.10
11660번 - 구간 합 구하기 5  (0) 2023.06.05
1057번 - 토너먼트  (0) 2023.05.25
2003번 - 수들의 합 2  (0) 2023.04.23
3036번 - 링  (0) 2023.04.05
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함