M, M = map(int, input().split())
heights = list(map(int, input().split()))
min_height, max_height = 1, max(heights)
H = 0
while(min_height <= max_height):
mean_height = (min_height + max_height) // 2
cut_num = 0
for height in heights:
if(height > mean_height):
cut_num += (height - mean_height)
# 가져가려고 하느 나무의 길이를 충족했다면,
# 나무를 아끼기 위해 한번 더 조사한다.
if(cut_num >= M):
H = mean_height
min_height = mean_height + 1
# 가져가려고 하는 나무의 길이를 충족하지 못한다면,
# 최대 길이를 낮춘다.
elif(cut_num < M):
max_height = mean_height - 1
print(H)
pypy3로 제출하여 통과하였음. 랜선 자르기를 풀었다면, 쉽게 풀 수 있음.
'# 코딩 문제 관련 > 파이썬' 카테고리의 다른 글
백준 7576번(python) (0) | 2020.08.02 |
---|---|
백준 2606번(python) (0) | 2020.08.01 |
백준 1654번(python) (0) | 2020.07.27 |
백준 10816번(python) (0) | 2020.07.19 |
백준 1920번(python) (0) | 2020.07.19 |