728x90
✅ 문제
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.
예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.
✅ 입력
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)이 주어진다.
둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000)
✅ 출력
첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다.
둘째 줄에는 가장 긴 증가하는 부분 수열을 출력한다. 그러한 수열이 여러가지인 경우 아무거나 출력한다.
✅ 예제 입력 1
6
10 20 10 30 20 50
✅ 예제 출력 1
4
10 20 30 50
✅ 풀이
- 11053: 가장 긴 증가하는 부분 수열에서 가장 긴 길이의 수열을 찾는 코드를 작성하면 된다.
✅ Code
N = int(input())
A = list(map(int, input().split()))
LIS = [1]*N
# 1. save the length
for cnt in range(1, N):
for prev in range(cnt):
if A[cnt] > A[prev]:
LIS[cnt] = max(LIS[cnt], LIS[prev]+1)
order = max(LIS)
print(order)
# 2. find the longest array
# solution 1
result = []
for idx in range(N-1, -1, -1): # N-1 -> 0
if LIS[idx] == order: # 해당하는 순서를 찾았을 때
result.append(A[idx])
order -= 1
print(*result[::-1])
728x90
'Computer Science > 백준' 카테고리의 다른 글
[백준 / Python] 2156: 포도주 시식 (1) | 2023.12.06 |
---|---|
[백준 / Python] 11053: 가장 긴 증가하는 부분 수열 (1) | 2023.12.03 |
[백준 / Python] 11052 : 카드 구매하기 (1) | 2023.10.04 |
[백준 / Python] 1463 : 1로 만들기 (0) | 2023.10.04 |
[백준 / Python] 6588 : 골드바흐의 추측 (0) | 2023.09.23 |