마음만 바쁜 사람
Published 2022. 4. 29. 18:33
2512-예산 ALGORITHM/BOJ

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

 

2512번: 예산

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

www.acmicpc.net

이분 탐색 중 파라매트릭 서치를 구현해보는 문제이다. 어렵게 생각하지 말고 기본적인 이분탐색 구현에 초점을 맞추면 쉽게 해결할 수 있다. 라이브러리를 불러와서 이분탐색 함수를 쓸 필요도 없다.

 

입력받은 예산들 중 가장 큰 값의 절반으로 중간점을 잡고 중간점과 각 예산 중 작은 값들을 더한 값이 예산 총액을 넘어가는지 확인하면서 이를 반복한다.

N = int(input())
req = list(map(int, input().split()))
M = int(input())

lo = 0
hi = max(req)
mid = hi//2
ans = 0

def is_possible(mid):		# 총 합이 예산 총액보다 작으면 True
    return sum(min(r,mid) for r in req) <= M

while lo <= hi:
    if is_possible(mid):	# 상한선을 mid로 했을 때 예산이 아직 남았으면	
        lo = mid + 1		# 이제 상한선의 가능범위가 mid+1 부터 hi까지로 범위가 좁아진다
        ans = mid
    else:
        hi = mid - 1
    mid = (lo + hi) // 2
print(ans)

'ALGORITHM > BOJ' 카테고리의 다른 글

2805-나무 자르기  (0) 2022.05.02
10815-숫자카드  (0) 2022.04.30
14502-연구소  (2) 2022.04.27
16946-벽 부수고 이동하기 4  (0) 2022.04.26
2178-미로탐색  (0) 2022.04.26
profile

마음만 바쁜 사람

@훌루훌루

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!