[BaekJoon] 백준 2352번 반도체 설계
🎈문제
https://www.acmicpc.net/problem/2352
💬설명
LIS 문제인데 DP로 풀게되면 시간초과가 난다.
이분탐색으로 문제를 풀어줘야 한다.
👩💻코드
# BaekJoon 2352.py
N = int(input())
arr = list(map(int, input().split()))
lst = []
# 이분 탐색으로 lower bound 찾아주기
def find(s, e, v):
global lst
while s < e:
m = (s + e) // 2
if lst[m] < v:
s = m + 1
else:
e = m
return e
for i in range(N):
# 첫번째 숫자인 경우
if i == 0:
lst.append(arr[i])
else:
# 증가하는 수열이면
if arr[i] > lst[-1]:
lst.append(arr[i])
# 감소하는 수열이면 이분탐색으로 자리 찾기
else:
# 0부터 len(lst)사이의 lst배열에서 arr[i]의 위치 찾아서 lst에 넣어주기기
lst[find(0, len(lst), arr[i])] = arr[i]
print(len(lst))
👉참고
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[BaekJoon] 백준 17471번 게리맨더링 (0) | 2021.10.07 |
---|---|
[BaekJoon] 백준 1949번 우수마을 (0) | 2021.09.30 |
[BaekJoon] 백준 17144번 미세먼지 안녕! (0) | 2021.09.25 |
[BaekJoon] 백준 2098번 외판원 순회 (1) | 2021.09.24 |
[BaekJoon] 백준 2668번 숫자고르기 (0) | 2021.09.10 |