https://www.acmicpc.net/problem/14002
14002번: 가장 긴 증가하는 부분 수열 4
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이
www.acmicpc.net
11053번 가장 긴 증가하는 부분 수열의 응용 문제로 부분 수열의 길이 출력에 부분 수열까지 출력하는 문제이다.
이미 앞 문제에서 수열 길이를 max(dp)로 출력하였고
dp에서 1~max(dp)인 순서대로 a 수열에서 뽑아오면 되는 문제이다
import sys
n = int(sys.stdin.readline())
a = list(map(int, sys.stdin.readline().split()))
dp = [1] * n
result = []
for i in range(1, n):
for j in range(i):
if a[i] > a[j]:
dp[i] = max(dp[i], dp[j]+1)
dm = max(dp)
for i in range(n-1, -1, -1):
if dp[i] == dm:
result.append(a[i])
dm -= 1
print(max(dp))
print(*result[::-1])
result[::-1] 대신 result.reverse()도 사용가능하다
'공부 > 알고리즘' 카테고리의 다른 글
[알고리즘][백준] 1699번 제곱수의 합 - 파이썬(python) 풀이 (0) | 2024.03.09 |
---|---|
[알고리즘][백준] 1912번 연속합 - 파이썬(python) 풀이 (0) | 2024.03.08 |
[알고리즘][백준] 11053번 가장 긴 증가하는 부분 수열 - 파이썬(python) 풀이 (0) | 2024.03.07 |
[알고리즘][백준] 2193번 이친수 - 파이썬(python) 풀이 (0) | 2024.03.07 |
[알고리즘][백준] 10844번 쉬운 계단 수 - 파이썬(python) 풀이 (0) | 2024.03.06 |