>> 이분 탐색
>> 정렬
처음에는 left, right의 값은 인덱스 값이 아닌
현재 톱날의 높이에 기준을 맞춰 지정해주어야 한다.
sorted를 하고 array[n-1]로 최댓값을 구하는 것보다
max(array)로 하는게
실행속도를 더 빠르게 한다!
n, m = map(int, input().split())
array = list(map(int, input().split()))
left = 0
right = max(array)
while left <= right:
mid = (left + right) // 2 # 현재 톱날의 높이
temp = 0
for i in array:
if mid <= i: # 톱날의 높이보다 나무가 높으면 잘라야함.
temp += i - mid
if temp >= m: # 자른 나무의 총 길이가 m보다 크거나 같다면?
# 톱날의 높이가 올라가야 자른 나무의 총 길이가 줄어듬.
# 톱날의 높이 + 1
left = mid + 1
else:
# 톱날의 높이가 낮아져야 자른 나무의 총 길이가 늘어남.
right = mid - 1
print(right)
'여니의 취준 준비 > 코딩테스트 (Python)' 카테고리의 다른 글
[1254] 팰린드롬 만들기 in python (0) | 2022.03.06 |
---|---|
[2792] 보석상자 in python (0) | 2022.03.06 |
[2108] 통계학 in python (2) | 2022.03.04 |
[2417] 정수 제곱근 In python (0) | 2022.03.04 |
[1789] 수들의 합 In python (0) | 2022.03.04 |