본문 바로가기
프로그래머스

프로그래머스 pccp 모의고사 1-4 운영체제

by 콩순이냉장고 2024. 12. 1.

문제 URL : https://school.programmers.co.kr/learn/courses/15008/lessons/121686

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

믄제 접근법 : pq를 이용하는 문제입니다.

저는 점수를 기준으로 정렬을해야하고 그다음 호출 기준으로 정렬을해야합니다.

 

꺼내서 실행시간을 전부 더하면되는데 실행시간끝나고도 호출이 매우 늦어지는 경우도 고려 해야하기

때문에 pq를 2개를 이용했습니다.

 

소스코드:

 

 

#include<bits/stdc++.h>
using namespace std;
#define ll long long
vector<long long> solution(vector<vector<int>> program) {
    vector<long long> answer(11);
    priority_queue<tuple<ll,ll,ll>,vector<tuple<ll,ll,ll>>,greater<tuple<ll,ll,ll>>>pq1,pq2;
    for(vector<int> &p : program){
        pq1.push({p[1],p[0],p[2]});
    }
    ll t1,t2,score1;
    ll t3,t4 ,score2;
    tie(t1,score1,t2)=pq1.top();//호출 ,점수, 실행
    pq1.pop();
    pq2.push({score1,t1,t2});
    ll cur=t1;
    while(!pq2.empty()){
        tie(score2,t3,t4)=pq2.top();
        pq2.pop();
        answer[score2]+=cur-t3;
        cur+=t4;
        while(!pq1.empty()){
            tie(t1,score1,t2) = pq1.top();
            if(cur>=t1){
                pq1.pop();
                pq2.push({score1,t1,t2});
            }
            else if (pq2.empty()&&cur<t1){
                cur=t1;
            }
            else{
                break;
            }
        }
    }
    answer[0]=cur;
    return answer;
}

 

궁금한점 혹은 모르는점 어떤질문이든 댓글은 언제나 환영입니다.