Coding Test/Baekjoon
2805. 나무 자르기
브이담곰
2024. 7. 11. 00:15
https://www.acmicpc.net/problem/2805
✔ 유형 : 이분 탐색
✔ 문제 풀이: 리스트 양쪽에 start와 end 피벗을 두고 범위를 좁혀가며 답을 찾는다.
#2850 나무자르기
#이분 탐색
import sys
input=sys.stdin.readline # input함수 바꾸기
N, M = map(int, input().split())
trees = list(map(int, input().split(' ')))
st, en = 0, max(trees) # 최소 최대값!
while st <= en:
# 중간 값 구하기이
mid = (st + en) // 2
count = 0
for tree in trees:
if tree > mid: #톱날보다 긴 나무들만.
count += tree - mid # 톱날h만큼 자른다
if count >= M: # 구하려는 나무길이보다 크면 더 잘라야하므로
st = mid+1 # 범위를 오른쪽으로 좁힌다
else: # 구하려는 나무길이보다 작으면 덜 잘라야하므로
en = mid-1 # 범위를 왼쪽으로 좁힌다.
print(en)