728x90
반응형
문제 출처 :
2512번: 예산
첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상
www.acmicpc.net
문제 풀이 :
- 특정값을 찾을때까지 이분 탐색을 계속 시행하면 된다.
- 이경우엔 우리가 정하고 있는 어떤 값 보다 예산이 많으면 그 값만큼으로 짜른다는 조건이 있는데 이부분만 잘 처리해주면 정답을 쉽게 구할 수 있다.
- 원리에 대해서 생각해보면 가장 작은 예산인 1원을 left로 두고 주어진 값중에 가장 큰 값인 max값을 right두고 탐색을 시작한다.
- 기준값을 토대로 예산을 정한뒤에 계산된 예산이 더 크다면 기준값을 낮춰서 계산되는 예산을 줄여주고
- 계산된 예산이 더 작으면 기준값을 높여서 계산되는 예산을 높여준다.
n = int(input())
arr = list(map(int,input().split()))
m = int(input())
left = 1
right = max(arr)
max_val = 0
while(left<=right):
mid = (left+right)//2
res=0
for i in arr:
if(i<=mid):
res+=i
else:
res+=mid
if(res>m):
right = mid-1
if(res<=m):
left = mid+1
print(right)
반응형
'Computer Science > Algorithm' 카테고리의 다른 글
[백준] 2110 - 공유기 설치 (Python) (0) | 2021.04.09 |
---|---|
[백준] 11286 - 절대값 힙 (Python) (0) | 2021.04.09 |
[백준] 최대,최소 힙 (Python) (0) | 2021.04.09 |
[백준] 1656 - 랜선 자르기 (Python) (0) | 2021.04.02 |
[백준] 2805 - 나무 자르기(Python) (0) | 2021.04.02 |