토니의 연습장

10. 2805 본문

Algorithm/CH 5. 응용 문제

10. 2805

bellmake 2025. 11. 23. 16:37

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

 

import sys

# 입력 개수인 N 이 매우 클 수 있으므로 (최대 백만 개 가능한 것으로 나옴) 필요
input = sys.stdin.readline

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


low = 0
high = max(H)

# 이분 탐색
answer = -1
while low <= high:
    mid = (low+high)//2
    
    total = 0
    # 인덱싱 대신 직접 값 순회 + 조기 종료 -> 비효율 인한 시간초과 방지
    for h in H:
        if h > mid:
            total += h - mid
            if total >= M:   # 이미 충분하면 더 볼 필요 없음 -> 비효율 인한 시간초과 방지
                break
    
    if total >= M:
        answer = mid
        low = mid+1
        
    else:
        high = mid-1
        
print(answer)

'Algorithm > CH 5. 응용 문제' 카테고리의 다른 글

(중요) 14502 - 바이러스 확산  (0) 2025.11.06
정수 입력받기 참고  (0) 2025.02.22
독특한 이중 list comprehension 접근방법  (0) 2025.02.22
2. 백준 1932  (1) 2025.01.04
1. 백준 11053  (1) 2025.01.04