목차
1. 문제
https://www.acmicpc.net/problem/2805
2805번: 나무 자르기
첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보
www.acmicpc.net
2. 핵심 아이디어
이분탐색 기본 유형 중 하나
이코테 책에 있는 떡 볶이 떡 만들기 유형과 같다.
3. 코드
#나무자르기
n,m= map(int, input().split())
k=list(map(int, input().split()))
start=0
end=max(k)
result=0
while(start<=end):
mid=(start+end)//2
temp=0
for i in k:
if mid<i:
temp+=(i-mid)
if temp>=m:
result=mid
start=mid+1
else:
end= mid-1
print(result)
4.배운점
알고 있는 문제임에도 초반 start,end 초기화를 잘못해주어 문제를 틀렸다.
이분탐색의 탐색 범위가 어느 곳인지 생각하며 초기값을 초기화해주자.
'백준 문풀' 카테고리의 다른 글
[Python] 7662. 이중 우선순위 큐(골4) / 최소힙과 최대힙 (0) | 2023.11.24 |
---|---|
[백준 500문제 달성] (0) | 2023.11.23 |
[Python] 21736. 헌내기는 친구가 필요해(실2) - BFS 기초 탐색 문제 (0) | 2023.11.20 |
[Python] 1107. 리모컨(골5) - 브루트포스 (0) | 2023.11.19 |
[Python] 1074. Z - 재귀적 사고와 분할정복 (0) | 2023.11.18 |