For Programmer

백준 12015번 파이썬 문제풀이(가장 긴 증가하는 부분 수열 2 ) - 이분탐색 + dp 본문

코팅테스트/백준 문제 모음

백준 12015번 파이썬 문제풀이(가장 긴 증가하는 부분 수열 2 ) - 이분탐색 + dp

유지광이 2022. 4. 12. 22:04
728x90


정말 어려운 문제이다.... 이분탐색에 dp개념을 추가해야 해결할 수 있다. 

자세한 설명은 생략한다.. python tutor로 dp배열 v가 어떻게 변하는지 확인해보기 바란다.

N = int(input())
arr = list(map(int, input().split()))
v = [-100000]
for i in range(N):
    s = 0
    e = len(v) - 1
    idx = 0
    while s <= e:
        mid = (s + e) // 2

        if v[mid] < arr[i]:
            idx = mid
            s = mid + 1
        else:
            e = mid - 1

    if idx == len(v) - 1: #지금 고른 숫자가 가장 큰 숫자이면 마지막에 추가해준다
        v.append(arr[i])
    else: #가장 큰 숫자가 아니라면 (탐색한 위치 + 1) 에 해당 숫자로 바꿔준다.
        v[idx + 1] = arr[i]


print(len(v) - 1)

 

728x90
Comments