반응형
https://www.acmicpc.net/problem/2512
n = int(input())
li = list(map(int, input().split()))
m = int(input())
minn = 0
maxx = max(li)
mid = (maxx + minn) // 2
ans = 0
def is_possible(mid): # 상한선을 mid로 한 각 지방의 예산합이 총 예산 이하인지 체크하는 함수.
return sum(min(mid, r) for r in li) <= m
# 이진탐색
while minn <= maxx:
if is_possible(mid): # 예산이 초과가 안 되면,
minn = mid + 1 # 최솟값을 하한선으로 재정의
ans = mid
else: # 예산 초과가 나면,
maxx = mid - 1 # 최댓값을 상한선으로 재정의
mid = (minn + maxx) // 2
print(ans)
이진탐색을 아직 잘 모르겠다. 일단 문제를 풀었으니 올려두지만 다음에 한번 더 보라고 올려놔야지.
반응형
'알고리즘 🤔' 카테고리의 다른 글
[백준 파이썬 2748] 피보나치 수 2 (브론즈 1) (0) | 2023.01.11 |
---|---|
[백준 파이썬 10815] 숫자 카드 (0) | 2023.01.10 |
[백준 파이썬 2309] 일곱 난쟁이 (0) | 2023.01.10 |
[백준 파이썬 1302] 베스트셀러 (0) | 2023.01.10 |
[백준 파이썬 11286] 절댓값 힙 (0) | 2023.01.10 |