본문 바로가기
알고리즘

백준_2512_예산(이분 탐색)

by 매화of사군자 2020. 2. 18.

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

 

2512번: 예산

첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상 100,000 이하이다. 그 다음 줄에는 총 예산을 나타내는 정수 M이 주어진다. M은 N 이상 1,000,000,000 이하이다. 

www.acmicpc.net

해결 방법

> 이분 탐색을 이용한다.

> 처음 들어온 예산들의 합이 총 예산과 같으면 예산들 중 max를 출력한다.

> 같지 않다면 이분 탐색을 이용한다.

 

더보기

num = int(input())

_list = list(map(intinput().split()))

total = int(input())

 

if sum(_list) == total:

    print(max(_list))

else:

    low = 0

    high = max(_list)

    result = 0

    while low <= high:

        mid = (low + high) // 2

        tmp = 0

        for i in _list:

            tmp += min(i, mid)

        

        if tmp > total:

            high = mid - 1

        else:

            result = mid

            low = mid + 1

 

    print(result)

댓글