-Code
def binary(arr, target, s, e):
while s < e:
mid = (s + e) // 2
if target <= arr[mid]:
e = mid
elif target > arr[mid]:
s = mid + 1
return e
n = int(input())
nums = list(map(int, input().split()))
dp = [0]
for num in nums:
if dp[-1] < num:
dp.append(num)
else:
p = binary(dp, num, 0, len(dp) - 1)
dp[p] = num
print(len(dp) - 1)
LIS에 대해서 풀다가 이해를 못 하는 것 같아서 원리를 아예 찾아보고 이분 탐색의 경우 이해하는 것에 많이 걸렸습니다.
이진 탐색 코드는 짜는데 return을 어떻게 해줘야하는 지와 dp자체의 숫자에 의미가 없고 LIS의 길이만 구할 때 사용하는 것이라는 것을 알게 되어 해결했지만 아쉬웠습니다.
'Beakjoon&프로그래머스 > 파이썬' 카테고리의 다른 글
[백준/파이썬] 1699번 제곱수의 합 (0) | 2022.05.12 |
---|---|
[백준/파이썬] 14501번 퇴사 (0) | 2022.05.12 |
[백준/파이썬] 11055번 가장 큰 증가 부분 수열 (0) | 2022.05.11 |
[백준/파이썬] 1912번 연속합 (0) | 2022.05.11 |
[백준/파이썬] 22857번 가장 긴 짝수 연속한 부분 수열 (small) (0) | 2022.05.11 |