🗂️ 문제
링크: https://www.acmicpc.net/problem/14002
💡 접근법
DP를 통해 LIS를 푸는 문제의 응용편이다.
i번째까지 순열에 대해 증가하는 순열인 경우이면서 부분 순열의 길이가 더 길어질 때, dp에 현재까지의 부분 순열을 저장한다.
이후, 가장 길이가 큰 부분 순열에 대해 부분 순열의 길이와 부분 순열을 출력한다.
😎 내 코드
import sys
N = int(sys.stdin.readline())
arr = list(map(int, sys.stdin.readline().split()))
dp = [[arr[i]] for i in range(N)]
for i in range(1, N):
for j in range(i):
if arr[i] > arr[j] and len(dp[j]) + 1 > len(dp[i]):
dp[i] = dp[j] + [arr[i]]
print(len(max(dp, key=len)))
print(*max(dp, key=len))
🧐 배운 점
- 출력값을 형식에 맞지 않게 출력하여 계속 에러가 발생했다. 출력 형식을 잘 확인하자…
✅ 정답 확인
'Algorithm > Baekjoon' 카테고리의 다른 글
[DP] 백준 #2156 포도주 시식 - python (0) | 2025.03.02 |
---|---|
[DP] 백준 #1904 01타일 - python (0) | 2025.02.27 |
[DP] 백준 #2579 계단오르기 - Python (0) | 2025.02.26 |
[이분탐색] 백준 #1072 게임 - Python (0) | 2025.02.19 |
[이분탐색] 백준 #6236 용돈 관리 - Python (0) | 2025.02.19 |