파라매틱 서치. k번 이상 자를 수 있는지 결정하는 문제.
자주나오는데 아직 좀 사고가 더디다.
import sys
input = sys.stdin.readline
def is_minimum(mini):
left = 0
cnt = 0
for right in cut_points:
if right - left >= mini:
left = right
cnt += 1
if cnt > k:
return True
return False
N, M, L = map(int, input().split())
cut_points = [int(input()) for _ in range(M)] + [L]
for _ in range(N):
k = int(input())
# M개의 지점 중 k개 선택. 사잇값의 최솟값이 가장 큰.
left = 1
right = 4000000
answer = 0
while left <= right:
mid = (left + right) // 2
if is_minimum(mid):
left = mid + 1
answer = max(mid,answer)
else:
right = mid - 1
print(answer)
'practivceAlgorithm > 다시 봐야할 문제들' 카테고리의 다른 글
[SWEA][Python] 1242 암호코드스캔 (0) | 2021.09.30 |
---|---|
[백준][Python] 19951 태상이의 훈련소 생활 (0) | 2021.09.28 |
[백준][Python] 1937 욕심쟁이 판다 (0) | 2021.09.19 |
[백준][Python] 1943 동전 분배 : 0-1 knapsack (0) | 2021.09.16 |
[백준][Python] 19585 전설 : 다음에 해결 (1) | 2021.09.05 |