🍋 문제링크


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

🍎 코드 제출 기록 (메모리 및 시간)


메모리 : 271608 KB

시간 : 548 ms

🍉 Code



N, M = map(int, input().split())
tree=list(map(int, input().split()))
tree.sort()

left = 0
right = 0
for i in range(N):
    if right < tree[i]:
        right = tree[i]

while (left <= right):
    mid = (left + right) // 2
    cut = 0
    for i in range(N):
        if (tree[i] >= mid):
            cut += tree[i] - mid
    if cut >= M:
        answer = mid
        left = mid + 1
    else:
        right = mid - 1

print(answer)

🥝 메모


  1. tree 배열을 오름차순 정렬한다
  2. mid 와 M을 비교하면서 이분 탐색

📌 while( left <= right )으로 해야 됨!!!!!