문제 링크
https://www.acmicpc.net/problem/2805
2805번: 나무 자르기
첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보
www.acmicpc.net
풀이
- 이분 탐색 문제
- 최대 범위가 매우 크므로 이분 탐색을 의심하도록 하자.
- start = 1, end = 최대 나무 길이
import sys
input = sys.stdin.readline
n, m = map(int,input().split())
data = list(map(int,input().split()))
start =1
end = max(data)
answer = 0
while start <= end :
mid = (start + end) // 2
tree = 0
# 트리의 길이가 자를 길이보다 길면 남은 나무 길이 더하기
for i in data:
if i > mid :
tree += i - mid
# 가져갈 나무 길이가 m 보다 작으면 줄이기
if tree < m :
end = mid -1
else :
answer = mid
start = mid + 1
print(answer)
'개발 > algorithm' 카테고리의 다른 글
[백준 4153번] 직각삼각형 -python (0) | 2022.02.12 |
---|---|
[백준 2839번] 설탕 배달 - python (0) | 2022.02.12 |
[백준 2798번] 블랙잭 - python (0) | 2022.02.12 |
[백준 2775번] 부녀회장이 될테야 (0) | 2022.02.12 |
[백준 2609번] 최대공약수와 최소공배수 - python (0) | 2022.02.12 |