rogramers:ディスクコントローラ-C+/priority queue演算子オーバーライド


ディスクコントローラ



コード#コード#

#include <string>
#include <vector>
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;
struct compare{
    bool operator()(pair<int,int> a, pair<int,int> b){
        if(a.second == b.second) return a.first > b.first; // 오름차순 정렬
        return a.second > b.second; // 오름차순 정렬
    }
};

int solution(vector<vector<int>> jobs) {
    int ans = 0;
    int time = 0;
    int idx = 0;
    priority_queue<pair<int,int>,vector<pair<int,int>>, compare> q;
    sort(jobs.begin(), jobs.end());
    do{
        if(idx == jobs.size()) goto roop;
        while(jobs[idx][0] <= time)
        {
            q.push({jobs[idx][0], jobs[idx][1]});
            idx++;
            if(idx == jobs.size()) break;
        }
        roop:
        if(!q.empty()){
            ans += (time-q.top().first) + q.top().second;
            time += q.top().second;
            q.pop();   
        }else time = jobs[idx][0];
    }while(idx < jobs.size() or !q.empty());
    ans /= jobs.size();
    return ans;
}
  • key point!
    タスクのリクエストから終了までの最短時間
    -->短い勤務時間のリクエストからその時間のリクエストが実行されたとき!
  • 悟り
    :priority_queue<pair<int,int>>特定compare함수の製作方法
  • /* 구조체로 만들고 나서 넣어줘야 함! */
    struct compare{
        /* 연산자 오버라이딩 */
        bool operator()(pair<int,int> a, pair<int,int> b){
            if(a.second == b.second) return a.first > b.first; // 오름차순 정렬
            return a.second > b.second; // 오름차순 정렬
        } // sort()의 compare와 반대로 짜줘야함
    };
    
    priority_queue<pair<int,int>,vector<pair<int,int>>, compare> q;
    :struct構造体後연산자 오버라이딩
  • 比較関数比較
  • sortのcompare
  • retrurn true -> swap
  • return false -> 그대로
  • 첫번째 파라미터 -> next value
  • 두번째 파라미터 -> current value
  • 演算子overriding compare
  • return true -> 그대로
  • return false -> swap
  • 첫번째 파라미터 -> current value
  • 두번째 파라미터 -> next value