1. dp를 이용한 풀이
N = int(input())
arr = list(map(int, input().split()))
dp = [1] * N
for i in range(N):
for j in range(i):
if arr[j] <= arr[i]:
dp[i] = max(dp[i], dp[j] + 1)
print(max(dp))
2. 이분 탐색을 이용한 풀이 (더 빠르다)
N = int(input())
A = list(map(int, input().split()))
LIS = [A[0]]
def find_index(x):
lo = 0
hi = len(LIS) - 1
while lo <= hi:
mi = (lo + hi) // 2
if LIS[mi] < x:
lo = mi + 1
else:
hi = mi - 1
return lo
for item in A:
if LIS[-1] < item:
LIS.append(item)
else:
LIS[find_index(item)] = item
print(len(LIS))
728x90
반응형
'Algorithm > 이론' 카테고리의 다른 글
기약분수 만들기 (0) | 2023.01.11 |
---|---|
알고리즘 유형 7. 소수 (0) | 2022.05.14 |
그래프가 주어지는 유형 (0) | 2022.04.25 |
알고리즘 유형 6. 동적 계획법 (0) | 2022.04.24 |
알고리즘 유형 5. 이분 탐색 (0) | 2022.04.24 |