C++:: 프로그래머스 <디스크 컨트롤러>

jahlee·2023년 4월 3일
0

프로그래머스_Lv.3

목록 보기
2/29
post-thumbnail

우선순위 큐를 원하는 대로 정렬하는 방법에 대해 알게되는 문제였다. 아래 예시와 같이 구조체에 operator함수를 만들어서 비교하는 방식으로 구현할 수 있다. 이외에도 문제자체가 좀 난해해서 다른 풀이들을 참조하였다. 여러번 풀면서 완전히 체득하는 편이 좋을것같아보이는 문제이다.

struct compare
{
    bool operator()(vector<int> a, vector<int> b)
    {
        return a[1] > b[1];
    }
};

int solution(vector< vector<int> > jobs)
{
    priority_queue< vector<int>, vector< vector<int> >, compare> pq;
}
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

struct compare
{
    bool operator()(vector<int> a, vector<int> b)
    {
        return a[1] > b[1];
    }
};

int solution(vector< vector<int> > jobs)
{
    int answer = 0, n = jobs.size();
    priority_queue< vector<int>, vector< vector<int> >, compare> pq;
    int cur = 0, cnt = 0;
    sort(jobs.begin(), jobs.end());
    while (cnt < n || !pq.empty())//작업이 남아있거나 pq에 남아있는 작업이 있다면
    {
        if (cnt < n && jobs[cnt][0] <= cur)// 현재 시간보다 작업의 요청시간이 같거나 작다면 && 작업이 남아있다면
        {
            pq.push(jobs[cnt++]);
            continue;// 현재 시간보다 요청 시간이 작은 작업이 여러개일때를 위해
        }
        if (!pq.empty())// 현재 시간보다 요청시간이 작은 작업들중
        {
            cur += pq.top()[1];// 현재시간에 작업들중 가장 작업시간이 작은 시간++
            answer += cur - pq.top()[0];// 현재까지 작업한 시간 - 해당 작업 요청시간을 전체 시간에 ++
            pq.pop();
        }
        else cur = jobs[cnt][0];// 현재 시간 갱신
    }  
    return answer/n;
}

0개의 댓글