토니의 연습장
10. 2805 본문
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 |