728x90
반응형
https://www.acmicpc.net/problem/12738
12738번: 가장 긴 증가하는 부분 수열 3
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (-1,000,000,000 ≤ Ai ≤ 1,000,000,000)
www.acmicpc.net
문제 해결
- 이진 탐색에서 bisect 의 bisect_left를 사용할줄 아는지 문제
- bisect_left(A,num) 은 A 리스트에서 num이상의 수가 최초로 나오는 인덱스를 의미한다.
- 따라서 bisect_left(dp,num)의 값이 k일 때 dp[k] = num으로 바꾸면서 나아가면 가장 긴 증가하는 부분수열을 dp에 넣을 수 있다.
CODE
from bisect import bisect_left
n = int(input())
A = list(map(int, input().split()))
dp = []
for num in A:
k = bisect_left(dp,num)
if len(dp) == k:
dp += [num]
else:
dp[k] = num
print(len(dp))
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 2580 스도쿠 (0) | 2023.04.10 |
---|---|
[python] 백준 2239 스도쿠 (0) | 2023.04.10 |
[python] 백준 2141 우체국 (0) | 2023.04.09 |
[python] 백준 1238 파티 (0) | 2023.04.09 |
[python] 백준 2660 회장뽑기 (0) | 2023.04.09 |
댓글