반응형
[문제 출처]
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 리스트에는 해당 인덱스에 위치하는 원소를 포함하는 부분 수열을 만들었을 때의 수열의 길이이다.(0부터 i까지의 원소를 사용했을 때)
dp[0]은 0번째 원소를 포함하고 0번째 원소까지만 사용하기에 0번째 원소만을 가지는 부분 수열이 가장 긴 수열이고 dp값은 1이 된다.
2중 for문을 통해 dp[i]의 값을 정하는데 i번째 원소보다 큰 j번째 원소에 대한 dp들 중에 가장 큰 값을 찾고 거기에 1을 더한 값을 저장한다.
import sys
input = sys.stdin.readline
n = int(input())
arr = list(map(int,input().split()))
dp = [1 for _ in range(n)]
for i in range(1,n):
for j in range(i):
if arr[i] < arr[j]:
dp[i] = max(dp[i], dp[j]+1)
print(max(dp))
반응형
'알고리즘 > python' 카테고리의 다른 글
[python/파이썬] 백준 17291 새끼치기 (0) | 2022.07.22 |
---|---|
[python/파이썬] 백준 18353 병사 배치하기 (0) | 2022.07.21 |
[python/파이썬] 백준 20152 Game Addiction (0) | 2022.07.20 |
[python/파이썬] 백준 15990 1, 2, 3 더하기 5 (0) | 2022.07.20 |
[python/파이썬] 백준 20546 기적의 매매법 (0) | 2022.07.19 |