본문 바로가기
백준

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

by 보먀 2024. 7. 2.
728x90
반응형

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

 

 

사용 알고리즘: DP

 

 

수열 A 가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 문제 

ex) A = {10, 30, 10, 20, ,20, 10} -> 30, 20, 10

 

 

입력

수열 A 의 크기 N (1 <= N <= 1,000)

수열 Ai (1 <= Ai <= 1,000)

 

 

여기서 중요한 것은 부분 수열이 연속적일 필요가 없다는 것!

-> 이중 for 문을 돌면서 현재 위치의 수와 (처음~현재 위치) 까지의 수들을 비교해서 현재 위치에서 가장 긴 감소하는 배열의 길이를 찾기

 

i 는 현재 위치, j 는 처음~현재 위치까지 수들을 비교하기 위한 인덱스

 

현재 위치를 고정시켜놓고 현재 위치까지 수열을 돌면서 현재 위치와 방문한 수열의 값을 비교

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

 

 

 

전체코드

n = int(input())
arr = list(map(int, input().split(' ')))

# dp 초기화
dp = [1] * 1000

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

print(max(dp))

 

 

※ 같은 로직으로 풀리는 문제: https://www.acmicpc.net/problem/11053

728x90
반응형