본문 바로가기
Problem Solving/BOJ

[BOJ][Python]백준 2805 풀이

by NoiB 2022. 2. 19.
반응형

https://www.acmicpc.net/problem/2805

 

2805번: 나무 자르기

첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보

www.acmicpc.net

import sys
ssr = sys.stdin.readline

n,m = map(int, ssr().split())
wood = list(map(int, ssr().split()))
low = 0
high = max(wood)
while low<=high:
    sum = 0
    mid = (low + high)//2
    for i in wood:
        if i >= mid:
            sum += i - mid
    if m > sum:
        high = mid-1
    else:
        low = mid+1
print(high)

저번에 올렸던 전선 문제랑 상당히 비슷합니다만 잘라낸 위에 있는 것들이 우리가 가져가는 것이란 걸 유의해서 푸셔야 합니다. 전선 문제를 풀어보셨다면 보자마자 이분탐색이 생각나실겁니다.

반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ][Python]백준 10773 풀이  (0) 2022.02.20
[BOJ][Python]백준 4949 풀이  (0) 2022.02.20
[BOJ][Python]백준 1966 풀이  (0) 2022.02.19
[BOJ][Python]백준 1874 풀이  (0) 2022.02.15