[Programmers] 디스크 컨트롤러
Date:
[Programmers] 디스크 컨트롤러
Problem URL : 디스크 컨트롤러
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
struct cmp {
bool operator()(pair<int, int>&a, pair<int, int>&b) {
if (a.second == b.second) {
return a.first > b.first;
}else {
return a.second > b.second;
}
}
};
int solution(vector<vector<int>> jobs) {
int answer = 0;
priority_queue<pair<int,int>,vector<pair<int,int>>, cmp> pq;
// 작업이 요청되는 시점이 작은 순으로, 같으면 작업의 소요시간이 작은 순으로 정렬
sort(jobs.begin(),jobs.end());
int t = jobs[0][0];
int sum = 0;
pq.push({jobs[0][0], jobs[0][1]});
int idx = 1;
int size = jobs.size();
int popNum = 0;
while(popNum != size) {
if(pq.empty()) {
// 작업할게 없을 때, 요청되는 시점이 제일 빠르고, 소요시간이 제일 적은 작업을 큐에 넣는다.
pq.push({jobs[idx][0],jobs[idx][1]});
t = jobs[idx][0];
}else {
t += pq.top().second;
sum += t - pq.top().first;
pq.pop();
popNum++;
while(idx < size && jobs[idx][0] <= t) {
pq.push({jobs[idx][0], jobs[idx][1]});
idx++;
}
}
}
answer = sum / size;
return answer;
}
댓글