본문 바로가기
알고리즘

가장 긴 감소하는 부분 수열 [백준 11722] - python

by 우보틀 2022. 3. 13.

import sys
input = sys.stdin.readline

def BOJ11722() :
  n = int(input())
  l = list(map(int, input().split()))
  dp = [1 for _ in range(n)]
  
  for i in range(n) :
    for j in range(i) :
      if l[i] < l[j] :
        dp[i] = max(dp[i], dp[j] + 1)

  print(max(dp))

BOJ11722()

 

접근 방법 :

1. 가장 긴 증가하는 부분 수열의 번외편이다. 
이전의 최대 길이를 이용해야 하므로 dp를 이용해 주었다.

 

2. 현재 비굣값에서 이전 인덱스까지의 값을 모두 탐색해 주면서 자신보다 큰 값이 있으면 그 값에서의 길이 + 1과 현재 최대 길이를 비교해 준다.

 

 

 

 

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

 

'알고리즘' 카테고리의 다른 글

팰린드롬? [백준 10942] - python  (0) 2022.03.15
내리막 길[백준 1520] - python  (0) 2022.03.14
제곱수의 합 [백준 1699] - python  (0) 2022.03.12
오르막 수[백준 11057] - python  (0) 2022.03.11
퇴사 [백준 14501] - python  (0) 2022.03.10