공부 자료/알고리즘

(Python/파이썬) 백준 11722번 - 가장 긴 감소하는 부분 수열

뚜루뚜루세니 2021. 8. 9. 10:32
728x90

문제출처: 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

1. 코드

1
2
3
4
5
6
7
8
9
10
11
= int(input())
arr=list(map(int, input().split()))
 
dp=[1]*n
 
for i in range(n):
    for j in range(i):
        if arr[j] > arr[i]:
            dp[i]= max(dp[i],dp[j]+1)
 
print(max(dp))
cs

2. 해결과정

arr 안의 수에 대해서 가장 긴 감소하는 부분 수열의 길이를 구해주면 되는 문제이다.

arr를 하나씩 돌면서 자신보다 앞의 숫자와 비교한다.

1) 자신보다 앞의 숫자가 큰 경우 : 나와 앞의 숫자는 감소하는 부분 수열

-> 앞 숫자의 부분수열의 길이에 1을 더해주면 자신의 부분 수열 값이 나온다.

 

각 숫자에서 가장 긴 숫자를 dp에 저장

dp의 max값을 출력해준다.

 

 

728x90