첫번째 코드
먼저 점화식을 세우는 방법알기!!
아이디어 만들어보기!!
DP 코드 작성하는 방법 연습하기!!
책의 코드를 참고했다!!
import sys
input = sys.stdin.readline
n = int(input())
a = list(map(int, input().split()))
a.insert(0, 0)
index = 0
maxlength = 1
B = [0] * 1000001
D = [0] * 1000001
ans = [0] * 1000001
B[maxlength] = a[1]
D[1] = 1
def binarysearch(l, r, now):
while l < r:
mid = (l + r) // 2
if B[mid] < now:
l = mid + 1
else:
r = mid
return l
for i in range(2, n+1):
if B[maxlength] < a[i]:
maxlength += 1
B[maxlength] = a[i]
D[i] = maxlength
else:
index = binarysearch(1, maxlength, a[i])
B[index] = a[i]
D[i] = index
print(maxlength)
index = maxlength
x = B[maxlength] + 1
for i in range(n, 0, -1):
if D[i] == index:
ans[index] = a[i]
index -= 1
for i in range(1, maxlength+1):
print(ans[i], end=' ')
통과!!
dp문제 쉬운것부터 많이 풀어보기!!
링크
programmers/백준/Platinum/14003. 가장 긴 증가하는 부분 수열 5 at main · ornni/programmers
repository for recording Programmers Algorithm problem solving - ornni/programmers
github.com
'코딩 테스트 > do it! 알고리즘 코딩테스트' 카테고리의 다른 글
097 CCW (0) | 2024.09.17 |
---|---|
098 선분 교차 2 (0) | 2024.09.17 |
095 외판원 순회 (미해결) (0) | 2024.09.12 |
094 행렬 곱셈 순서 (미해결) (0) | 2024.09.10 |
093 Dance Dance Revolution (미해결) (0) | 2024.09.10 |