728x90
https://www.acmicpc.net/problem/12015
LIS 문제는 종만북에서 보고 까먹을라 하니까 만나서 복습하는 좋은 기회가 됐다.
DP를 사용하지만 거기에 추가로 탐색절차에 이진탐색(lower bound)를 추가한다.
생각보다 나무위키에 정리가 잘 돼있다 ㅋㅋㅋ
저기서 2번째 탐색방법을 참고하면 표로 정리되어있어서 보기 좋다
내가 파이썬에서 쓴 bisect_left 함수가 이진탐색의 lower bound 함수이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import sys
from bisect import bisect_left
input = sys.stdin.readline
n = int(input())
arr = list(map(int, input().split()))
dp = [arr[0]]
for i in range(n):
if arr[i] > dp[-1]:
dp.append(arr[i])
else:
idx = bisect_left(dp, arr[i])
dp[idx] = arr[i]
print(len(dp))
|
cs |
728x90
'PS > 백준' 카테고리의 다른 글
[백준 16637번] 괄호 추가하기 (파이썬/python) (0) | 2021.06.19 |
---|---|
[백준 1300번] K번째 수 (파이썬/python) (0) | 2021.06.16 |
[백준 12865번] 평범한 배낭 (파이썬/python) (0) | 2021.06.16 |
[백준 2110번 ] 공유기 설치 (파이썬/python) (0) | 2021.06.15 |
[백준 11279번] 최대 힙 (파이썬/python) (0) | 2021.06.15 |