본문 바로가기

프로그래밍/백준

백준 12015 가장 긴 증가하는 부분 수열2 - 파이썬

문제.

 

풀이.

이분 탐색을 이용하여 dp배열의 최댓값과 비교하여 큰 값이면 오른쪽에, 낮은 값이면 dp배열의 값에서 이분 탐색을 이용하여 해당 값이 들어갈 위치를 결정하여 dp 배열에 넣고 dp 배열의 길이를 출력한다.

 

소스코드

import sys
from bisect import bisect_left

input = sys.stdin.readline
n = int(input())
arr = list(map(int, input().split()))
dp = []

for i in arr:
    k = bisect_left(dp, i)
    if len(dp) <= k:
        dp.append(i)
    else:
        dp[k] = i
print(len(dp))