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번과 비슷한 문제이다. 11053번 문제를 풀 수 있어야 이 문제도 풀 수 있다.
11053번 풀이 보러 가기 →
두 문제의 차이점으로는 11053번은 길이를 출력했지만, 이 문제는 길이 뿐 아니라 LIS 그 자체도 출력해야 한다.
11053번의 경우는 길이를 출력하기위해 길이정보를 메모이제이션을 했지만,
이 문제의 경우 LIS 그 자체를 출력해야 하기 때문에 LIS 정보를 메모이제이션 해야 한다.
arr_len = int(input())
arr = list(map(int,"10 20 10 30 20 50".split()))
LIS = [[item] for item in arr]
for i in range(arr_len):
for j in range(i):
if arr[i] > arr[j] and len(LIS[j]) + 1 > len(LIS[i]):
LIS[i] = LIS[j] + [arr[i]]
longest_LIS = sorted(LIS,key=len)[-1]
print(len(longest_LIS))
print(*longest_LIS)
'알고리즘 > 백준-파이썬' 카테고리의 다른 글
[백준] 1912번 (python 파이썬) (0) | 2022.04.28 |
---|---|
[백준] 11053번 (python 파이썬) (0) | 2022.04.21 |
[백준] 2193번 (python 파이썬) (0) | 2022.04.20 |
[백준] 10884번 (python 파이썬) (0) | 2022.04.20 |
[백준] 15990번 (python 파이썬) (0) | 2022.04.19 |