본문 바로가기

Algorithm/Binary Search

Baekjoon 2512 예산

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

결과 2148 KB / 0 ms

출처 BOJ

언어 C++ 17

 

풀이

이분탐색에 기반한 문제 풀이

0 ~ 최대값 사이에서 이분탐색을 진행하며 조건에 맞는 값을 계산한다.

입력된 총 예산을 기준으로 범위를 수정해가며 이분탐색이 종료될까지 진행한다.

 

소스코드

#include <iostream>
#include <vector>

using namespace std;

int getMax(vector<int> inputs) {
	int res = 0;
	for (int i = 0; i < inputs.size(); i++)
		if (res < inputs[i])
			res = inputs[i];
	return res;
}

int getSum (vector<int> inputs, int mxm)
{
	int res = 0;
	for (int i = 0; i < inputs.size(); i++)
		if (inputs[i] <= mxm)
			res += inputs[i];
		else
			res += mxm;
	return res;
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	int n; cin >> n;
	vector<int> inputs(n); 	for (int i = 0; i < n; i++) cin >> inputs[i];
	int mxm; cin >> mxm;

	int left = 0, right = getMax(inputs);

	while (left <= right) {
		int mid = (left + right) / 2;

		if (getSum(inputs, mid) > mxm)
			right = mid - 1;
		else
			left = mid + 1;
	}

	cout << right;

	return 0;
}

'Algorithm > Binary Search' 카테고리의 다른 글

Baekjoon 1654 랜선자르기  (0) 2019.11.11
Baekjoon 1620 나는야 포켓몬 마스터 이다솜  (0) 2019.06.02
BaekJoon 1072 게임  (0) 2019.02.16
Baekjoon 2110 공유기 설치  (2) 2019.02.13
Baekjoon 2805 나무 자르기  (0) 2019.02.13