# 반도체 설계
import sys
import bisect
input = sys.stdin.readline
N = int(input())
port = list(map(int, input().split()))
result = [port[0]]
for x in range(1, N):
if port[x] > result[-1]:
result.append(port[x])
else:
index = bisect.bisect_left(result, port[x])
result[index] = port[x]
print(len(result))
이진탐색, bisec
1. 입력을 받고 port의 첫번째 값을 result에 추가
2. 남은 port의 값중에서
- result의 마지막 값보다 크면 append
- result의 마지막 값보다 작으면 bisect_left로 들어갈 index를 구해서 값 교체
3. result의 길이 출력
문제만 다르지 가장 긴 증가하는 부분 수열 로직과 똑같이 구현하면 된다.
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 10159번 - 저울 (파이썬) (0) | 2022.02.19 |
---|---|
[백준] 2143번 - 두 배열의 합 (파이썬) (0) | 2022.02.18 |
[백준] 3109번 - 빵집 (파이썬) (0) | 2022.02.18 |
[백준] 2357번 - 최솟값과 최댓값 (파이썬) (0) | 2022.02.13 |
[백준] 10868번 - 최솟값 (파이썬) (0) | 2022.02.13 |