본문 바로가기
BOJ

[BinarySearch] 예산

by YGSEO 2020. 11. 29.
728x90

랜선자르기와 비슷한 유형의 문제

 

_ = int(input())
array = list(map(int, input().split()))
max_budget = int(input())

start = 0
end = max(array)

while start <= end:
    mid = (start + end) // 2 
    our_budget = []
    for x in array:
        our_budget.append(min(x, mid))
        
    if sum(our_budget) > max_budget: 
        end = mid - 1
    else:
        start = mid + 1

print(end)
# start = 128, end = 127로 종료된다

여기서도 최대를 찾는 것이기 때문에

랜선 자르기 문제처럼 end지점이 찾고자 하는 값이다.

our_budget을 리스트로 만들었는데 그냥 0으로 할당하고 매번 더해도 상관은 없다.

디버깅 하면서 리스트 보고 싶어서 만들었음.

 

검색하다보니 min으로 x와 mid를 비교하면 코드가 더 간단해진다는 것을 깨달음.

728x90

'BOJ' 카테고리의 다른 글

[BinarySearch] 수들의 합  (0) 2020.12.01
[BinarySearch] 공유기 설치  (0) 2020.12.01
[BinarySearch&Counter] 숫자 카드 2  (0) 2020.11.27
[BinarySearch] 랜선 자르기  (0) 2020.11.20
[BinarySearch] 나무 자르기 (iterative vs recursion)  (0) 2020.11.19

댓글