https://www.acmicpc.net/problem/2805
2805번: 나무 자르기
첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보
www.acmicpc.net
이진탐색을 이용하여 절단기의 높이를 최대로 하는 경우의 절단기높이를 구하는 문제이다.
절단기의 높이를 st와 ed의 중간으로 잡은 뒤,
원하는 나무 양보다 많이 나오면? ==> st를 더 올려
원하는 나무 양보다 적게 나오면? ==> ed를 더 내려
위와같은 로직으로 이진탐색을 돌면 풀린다.
n,m = list(map(int,input().split()))
arr = list(map(int,input().split()))
st = 0
ed = arr[-1]
while st+1 < ed:
height = (st+ed)//2
tree = 0
for i in range(len(arr)):
if (arr[i] - height) >=0:
tree+= arr[i] - height
# 나무양이 많이 나오면 st올리기
if tree >= m :
st = height
# 나무양이 적게 나오면 ed내리기
if tree< m:
ed = height
print(st)
'Algorithm > baekjoon' 카테고리의 다른 글
baekjoon 2343: 기타 레슨 (0) | 2022.07.13 |
---|---|
baekjoon 2512: 예산 (0) | 2022.07.12 |
baekjoon 17951: 흩날리는 시험지 속에서 내 평점이 느껴진거야 (0) | 2022.07.07 |
baekjoon 4195: 친구 네트워크 (0) | 2022.07.07 |
baekjoon 7490: 0 만들기 (0) | 2022.07.01 |
댓글