728x90
반응형
문제 링크
https://www.acmicpc.net/problem/2805문제 요약
상근이는 M미터의 나무가 필요하고, 이를 위해 주어진 나무들을 절단기로 자를 높이 H를 찾아야 합니다. 절단기의 높이를 설정하면, 나무 중에서 H보다 큰 나무는 그 위의 부분이 잘리고, H보다 작은 나무는 자르지 않습니다. 절단 후 나무 길이의 합이 M미터 이상이 되도록 하는 절단기의 높이 H의 최댓값을 구하는 것이 목표입니다.
조건 요약
- 나무의 수 N은 최대 1,000,000개.
- 상근이가 가져가려는 나무의 길이 M은 최대 2,000,000,000.
- 나무의 높이는 최대 1,000,000,000.
- 설정할 수 있는 절단기의 높이 H는 정수 또는 0이며, H가 클수록 더 많은 부분의 나무가 잘리게 됩니다.
푼 방법
- 이분 탐색의 범위 설정: 절단기의 높이를 min = 1, max = 나무 중 가장 높은 값으로 설정합니다.
- 이분 탐색 반복: 절단기의 높이 avg를 설정하고, 이 높이로 잘린 나무의 길이를 계산합니다.
- 조건에 따른 범위 조정:
- 잘린 나무의 길이가 m 이상이면 절단기 높이를 더 높여서 탐색.
- 잘린 나무의 길이가 m 미만이면 절단기 높이를 낮춰서 탐색.
- 최종 결과 출력: 이분 탐색이 끝나면 max 값이 최적의 절단기 높이가 됩니다.
정답 코드
n, m = list(map(int, input().split()))
woods = list(map(int, input().split()))
max=max(woods)
min=1
while min<=max:
avg=(max+min)//2
sum=0
for i in woods:
if i-avg>0:
sum+=i-avg
if sum>=m:
min=avg+1
else:
max=avg-1
print(max)
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 17086 - 아기 상어 2 (0) | 2024.10.25 |
---|---|
[백준] 2644 - 촌수계산 (1) | 2024.10.19 |
[백준] 28325 - 호숫가의 개미 (1) | 2024.10.12 |
[백준] 14569 - 시간표 짜기 (5) | 2024.10.09 |
[백준] 1477 - 휴게소 세우기 (0) | 2024.10.07 |