https://www.acmicpc.net/problem/14002
핵심아이디어는 변경시킨 인덱스를 별도의 배열에 저장하여 역추적 하는 것(v 에 저장 후 역추적).
n = int(input())
a = [0]+list(map(int, input().split()))
DP = [0]*(n+1)
v = [-1]*(n+1)
for i in range(1,n+1):
for j in range(1, i, 1):
# 자신(i)보다 값(a)은 작으면서 길이(DP)는 크다면
if a[i] > a[i-j] and DP[i] < DP[i-j]:
DP[i] = DP[i-j]
v[i] = i-j # 역 추적 하기 위한 인덱스를 배열에 저장
DP[i] += 1
print(max(DP))
### 역추적 하기 위해 추가된 부분 ###
ans = []
max_idx = DP.index(max(DP))
while max_idx != -1:
ans.append(a[max_idx])
max_idx = v[max_idx]
ans.reverse()
print(' '.join(map(str, ans)))
728x90
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[Python]17135. 캐슬 디펜스 (0) | 2019.04.07 |
---|---|
[Python]13398. 연속합 2 (0) | 2019.04.07 |
[Python]11053. 가장 긴 증가하는 부분 수열 (LIS) (0) | 2019.04.05 |
[Python]2156. 포도주 시식 (0) | 2019.04.04 |
[Python]9465. 스티커 (0) | 2019.04.04 |
댓글