https://www.acmicpc.net/problem/2805
2805번: 나무 자르기
첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보
www.acmicpc.net
1654번 문제와 동일하다.
https://aigong.tistory.com/397
[Baekjoon] 1654번 : 랜선 자르기 (Python, 이분 탐색)
[Baekjoon] 1654번 : 랜선 자르기 (Python, 이분 탐색) 목차 https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이..
aigong.tistory.com
다만 어이없는 것은 동일한 문제인데 시간 초과가 난다는 것이다.
import sys
input = sys.stdin.readline
위 코드를 추가함으로써 간신히 코드 통과
희한하다.
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
l = sorted(list(map(int, input().split())))
start, end = 1, l[-1]
while start <= end:
mid = (start+end)//2
cl = 0
for i in l:
if i > mid:
cl += i-mid
if cl >= m:
start = mid + 1
else:
end = mid - 1
print(end)
sys 없이 sumation을 다른 방식으로 진행했더니 더 빨라진 후 통과하였다.
희한.
n, m = map(int, input().split())
l = list(map(int, input().split()))
start, end = 1, max(l)
while start <= end:
mid = (start+end)//2
cl = sum(i-mid if i>mid else 0 for i in l)
if cl >= m:
start = mid + 1
else:
end = mid - 1
print(end)