https://www.acmicpc.net/problem/2805
문제 한줄 이해
-N의 나무가 일자로 서있을때 높이에 따라 싹뚝 잘랐을때 잘려나간 나무의 길이의 합이 적어도 M미터의 나무를 집에 가져가기 위한 높이의 최대값 구하기
생각난 풀이
1번째 방법: 우선 N과 M의 범위가 생각보다 크다고 생각이 들어 이분탐색을 통해 해결해야 겠다고 생각했다.
import sys
n, m = map(int, sys.stdin.readline().split())
tree = list(map(int, sys.stdin.readline().split()))
tree.sort()
start = tree[0]
end = tree[-1]
ans = 0
while start<=end:
result = 0
mid = (start+end)//2
for i in tree:
if i > mid:
result += i-mid
if result > m:
start = mid+1
if ans < mid:
ans = mid
elif result < m:
end = mid-1
else:
ans = mid
break
print(ans)
처음에 start값과 end값을 단순히 나무들의 높이가 최소 최대값으로 설정하면 된다고 생각했다.
하지만
N = 3 M = 9
3 4 5
이런 경우에 높이가 0일때와 1일때 반영이 되지 않는 코드였기 때문에
start = 0
end = tree[-1]
ans = 0
이와 같이 수정했다.
'알고리즘 > Python' 카테고리의 다른 글
[백준] 1074 - Z (0) | 2023.07.02 |
---|---|
[백준] 21736 - 헌내기는 친구가 필요해 (0) | 2023.06.29 |
[백준] 18870 - 좌표압축 (0) | 2023.06.28 |
[백준] 11724-연결 요소의 개수 (0) | 2023.06.28 |
[백준] 2630-색종이 만들기 (0) | 2023.06.27 |