https://www.acmicpc.net/problem/2512
SOLUTION
이분탐색으로 풀 수 있는 문제다.
이분탐색에 대한 정의를 알고 오길 추천한다. (https://claude-u.tistory.com/267)
예산 금액을 움직여 균등하게 분배할 수 있는 상한선을 구하는 문제다.
1) 가장 적음 금액 0을 start로, 가장 큰 상한선 max(budget)을 end로 둔다.
2) 이분탐색이 끝날 때까지 while 문을 돌린다. 혹은 모든 예산을 배정해도 부족함이 없을 경우(total_budget > M)는 max(budget)을 출력한다.
3) mid를 start와 end의 중간으로 두고, mid와 예산(i) 중 작은 값을 total_budget에 더해준다.
4-1) total_budget이 목표 수준(M)을 초과하면 mid-1을 end로 두고 다시 while문 반복
4-2) total_budget이 목표 수준(M)을 이하면 mid+1을 start으로 두고 다시 while문 반복
5) start와 end가 같아지면: 조건을 만족하는 상한선을 찾으면 탈출한다.
6) 결과값인 mid출력
PYTHON CODE
N = int(input())
budget = list(map(int, input().split()))
M = int(input())
start, end = 0, max(budget)
total_budget = 0
if sum(budget) >= end:
print(max(budget))
else:
while start <= end:
mid = (start+end) // 2
total_budget = 0
for i in budget:
total_budget += min(mid, i)
if total_budget > M:
end = mid - 1
else:
start = mid + 1
print(mid)
'Programming [Python] > 백준 알고리즘 솔루션' 카테고리의 다른 글
#396 백준 파이썬 [1300] K번째 수 - 이분탐색 (0) | 2020.02.11 |
---|---|
#395 백준 파이썬 [2110] 공유기 설치 - 이분탐색 (2) | 2020.02.10 |
#393 백준 파이썬 [2805] 나무 자르기 - 이분탐색 (0) | 2020.02.10 |
#392 백준 파이썬 [7579] 앱 - 냅색 알고리즘 (0) | 2020.02.04 |
#391 백준 파이썬 [17626] Four Squares (0) | 2020.02.04 |