백준/이분탐색

[백준 2512번 / C++] 예산

배발자 2022. 2. 16.
반응형

이분 탐색을 이용하여 풀면 된다. 

 

1. 벡터 V에 값을 저장 후 오름차순으로 정렬

2. high 값은 벡터의 제일 큰 원소의 값으로 저장

3. sum 변수에 mid값과 벡터의 원소의 값을 비교하여 작은값을 더함

4. sum값이 m보다 크거나 같으면 result 값에 mid 값 저장 후 이분 탐색

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std; 
typedef long long ll; 

int main() {
	ios::sync_with_stdio(false); 
	cin.tie(0); cout.tie(0); 
	int n; cin >> n; 
	vector <ll> v; 
	ll s, e; 

	for (int i = 0; i < n; i++) {
		ll a; cin >> a; 
		v.push_back(a); 
	}
	sort(v.begin(), v.end()); 
	ll m; cin >> m; 
	ll l = 0; 
	ll h = v[n-1]; 
	ll result = 0; 
	while (l <= h) {
		ll mid = (l + h) / 2; 
		ll sum = 0; 
		for (int i = 0; i < n; i++) {
			sum += min(v[i], mid); 
		}
		if (m >= sum) {
			result = mid;
			l = mid + 1;
		}
		else h = mid - 1; 
	}
	cout << result; 
}

 

 

2512번: 예산

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

www.acmicpc.net

 

반응형

댓글