Scribbling

[C++] Load Balancing 본문

Computer Science/C++

[C++] Load Balancing

focalpoint 2023. 8. 19. 03:53
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <string>
#include <algorithm>
#include <queue>
#include <sstream>
#include <iostream>
#include <numeric>


using namespace std;


class Solution {
public:
	int solution(int n, int m, vector<int>& burstTime) {
		int ret = accumulate(burstTime.begin(), burstTime.end(), 0);
		int left = *max_element(burstTime.begin(), burstTime.end());
		int right = ret;
		while (left <= right) {
			int mid = (left + right) / 2;
			int k = num_groups(burstTime, mid);
			if (k <= n) {
				ret = min(ret, mid);
				right = mid - 1;
			}
			else {
				left = mid + 1;
			}
		}
		return ret;
	}

	int num_groups(vector<int>& burstTime, int limit) {
		int cnt = 0;
		int total = 0;
		for (int t : burstTime) {
			total += t;
			if (total > limit) {
				cnt++;
				total = t;
			}
		}
		return cnt + 1;
	}

};


void main() {
	int n = 3;
	vector<int> vec1 = { 7, 2, 3, 4, 5 };
	cout << Solution().solution(3, vec1.size(), vec1) << endl;

	n = 2;
	vector<int> vec2 = { 9, 2, 4, 4, 5};
	cout << Solution().solution(2, vec2.size(), vec2) << endl;
}

'Computer Science > C++' 카테고리의 다른 글

[C++] istringstream  (0) 2023.08.22
[C++] Chapter 2: Types  (0) 2023.08.21
[C++] lower_bound, upper_bound  (0) 2023.08.18
[C++] isalnum, tolower  (0) 2023.08.18
[C++] LeetCode 128. Longest Consecutive Sequence  (0) 2023.08.18