안녕 세상아,

[c++/백준] 2512 예산 본문

백준

[c++/백준] 2512 예산

돈 많은 백수가 되고싶다 2023. 5. 13. 15:09

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

 

2512번: 예산

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

www.acmicpc.net

이분탐색 문제지만 이분탐색 말고 다른걸로 풀려고 했었고 분명 정답, 반례라고 적혀있는 모든게 맞았지만 바로 틀려버려서 이분탐색 문제로 풀었다. 

 

역시 적힌대로 푸는게 맞는 것 같긴함. 근데 아직도 모르겠다. 이 정답 말고 내가 푼건 왜 틀린건지,,, ㅜ

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n, m;
	cin >> n;
	vector<int> account;

	for (int i = 0; i < n; i++) {
		int x;
		cin >> x;
		account.push_back(x);
	}
	cin >> m;
	
	int left = 0;
	int right = account[n - 1];

	int sum, result = 0;
	
  //이분탐색
	while (left <= right) {
		sum = 0;
		int mid = (left + right) / 2;

		for (int i = 0; i < n; i++) {
			sum += min(account[i], mid);
		}
		if (m >= sum) {
			result = mid;
			left = mid + 1;
		}
		else
			right = mid - 1;
	}
	cout << result;
}

어려웠음..이분탐색을 더 공부해야겠어요

'백준' 카테고리의 다른 글

[c++/백준] 9461 파도반 수열  (0) 2023.05.14
[c++/백준] 2559 수열  (0) 2023.05.13
[c++/백준] 15657 N과 M (8)  (0) 2023.05.12
[c++/백준] 2579 계단 오르기  (0) 2023.05.12
[c++/백준] 1004 어린 왕자  (0) 2023.05.12