728x90
https://www.acmicpc.net/problem/11053
11053번: 가장 긴 증가하는 부분 수열
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이
www.acmicpc.net
실버 2이지만 생각보다 오래걸렸다.
이 방법으로 푸는 게 아닌거라고는 알고 있지만, 어떻게든 풀어는 보았다.
DP인 만큼 일단 기억할 배열을 만든다.
result = [[None] for i in range(N)]
그리고 2중 반복문으로 해당 수로 만든 수열과 DP에 기억된 수열 중 최대 값이 본인보다 작은 수열 중에서 길이가 더 긴 수열로 본인 차례의 가장 긴 수열을 만들고, 마지막 결과에서 그 수열 중에서 길이가 가장 긴 수열의 길이를 출력하는 것이다.
import sys
N = int(input())
A = list(map(int, sys.stdin.readline().split()))
result = [[None] for i in range(N)]
for i in range(N):
cur_list = [A[i]]
for t in range(i):
if A[i] > A[t]:
if len(cur_list) < len(result[t]) + 1:
cur_list = result[t] + [A[i]]
result[i] = cur_list
result.sort(key= lambda x : len(x))
print(len(result[-1]))
'알고리즘 > 동적 프로그래밍' 카테고리의 다른 글
백준 1149 RGB거리 (Python) (1) | 2024.01.28 |
---|---|
백준 9251 LCS (Python) (0) | 2024.01.20 |
백준 12865 평범한 배낭 (0) | 2024.01.20 |
백준 11726 2xn 타일링 (0) | 2024.01.17 |
백준 2193 이친수 (0) | 2024.01.17 |