알고리즘(백준)/이분탐색
[알고리즘/이분 탐색] 2805번 : 나무 자르기 - python
되다
2024. 2. 10. 19:31
링크 : https://www.acmicpc.net/problem/2805
2805번: 나무 자르기
첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보
www.acmicpc.net
- 문제
- 소요시간: 22분 실패
- 설계하기(접근방법)
1. 입력받기
나무의 길이를 입력받는다
2. 구현하기
이분 탐색 문제를 풀어보았다
start 높이를 1로 가정하고
end는 모든 나무 높이의 합(최대치)로 한다
start, end의 중간값으로
나무를 잘라본 후
잘린 결과를 더해 나간다
만약 총 합이 target보다 크다면
start크기를 mid + 1로 늘려주어서
다음 mid를 늘려준다
그렇다면 나무가 덜 잘리게 된다
반대라면
end를 mid -1로 줄여주어서
다음 mid를 줄인다
그렇다면 나무가 더 잘린
3. 출력하기
- 코드(출력)
n , target = map(int,input().split())
tree = list(map(int,input().split()))
start, end = 1, sum(tree)
while start <= end:
cnt = 0
mid = (start + end) // 2
for i in tree :
if i > mid:
cnt += i - mid
if cnt >= target:
start = mid + 1
else:
end = mid - 1
print(end)
- 얻어갈 부분
1. 이분탐색에 대해서 배웠다