문제링크:https://www.acmicpc.net/problem/2805
다루는 주제: 이분 탐색
import sys
def binary(arr, start, end):
result = 0
while start <= end: # end가 start보다 낮거나 같아질떄까지 반복한다.
middle = (start + end) // 2
total = 0 # 가져갈수있는 나무길이 총합
for tree in arr:
if tree > middle: # 나무길이가 중간값보다 크면
total += tree - middle # 나무길이 - 중간값 즉 가져갈 나무길이를 total에 저장
if total < M: # 가져갈 나무길이의 총합이 M에 미치지못하면
end = middle - 1 # 자를 높이를 낮춰준다.
else:
result = middle # 아니라면 자른 높이를 결과값에 저장 후
start = middle + 1 # 자를 높이를 높혀준다.
return result
N, M = map(int, sys.stdin.readline().split())
treeList = list(map(int, sys.stdin.readline().split()))
a = binary(treeList, 0, max(treeList))
print(a)
'Algorithm > 백준(파이썬)' 카테고리의 다른 글
백준 1991 파이썬(Python) 문제풀이 트리순회 (0) | 2023.04.22 |
---|---|
백준 5904 파이썬(Python) 문제풀이 Moo (0) | 2023.04.20 |
백준 2493 파이썬(Python) 문제풀이 탑 (0) | 2023.04.19 |
백준 10830 파이썬(Python) 문제풀이 행렬제곱 (0) | 2023.04.17 |
백준 6549 파이썬(Python) 문제풀이 히스토그램에서 가장 큰 직사각형 (0) | 2023.04.17 |