BOJ 2805 나무 자르기

LONGNEW·2021년 1월 18일
0

BOJ

목록 보기
68/333

https://www.acmicpc.net/problem/2805
시간 1초, 메모리 256MB
input :

  • n m(1 ≤ n ≤ 1,000,000, 1 ≤ m ≤ 2,000,000,000)
  • 나무의 높이(0 <= 높이 <= 1,000,000,000)
  • 나무의 높이의 합은 항상 M보다 크거나 같기 때문에, 상근이는 집에 필요한 나무를 항상 가져갈 수 있다.

output :

  • 절단기에 설정할 수 있는 높이의 최댓값

나무를 자를 때. 나무의 길이가 mid 보다 길어야 계산이 가능하다.
import sys

n, m = map(int, sys.stdin.readline().split())
data = list(map(int, sys.stdin.readline().split()))

low = 1
high = max(data)

while low <= high:
    mid = (low + high) // 2
    dis = 0
    for item in data:
        if item - mid > 0:
            dis += item - mid
    if dis >= m:
        low = mid + 1
    else:
        high = mid - 1

print(high)

low랑 high랑 헷갈리면

    if dis >= m:
        low = mid + 1
        ret = mid
    else:
        high = mid - 1

해서 ret 출력하는 것도 나쁘진 않을듯? 물론 변수를 하나 더 써야 하지만..

0개의 댓글