๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Programmers

[C++/PGS] [PCCP ๋ชจ์˜๊ณ ์‚ฌ #1] 4๋ฒˆ - ์šด์˜์ฒด์ œ

by xxilliant 2025. 5. 2.
728x90
๋ฐ˜์‘ํ˜•

 

https://school.programmers.co.kr/learn/courses/15008/lessons/121686#

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr


ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค PCCP ๋ชจ์˜๊ณ ์‚ฌ 1ํšŒ - 4๋ฒˆ

์†Œ์š”์‹œ๊ฐ„ ์•ฝ 59๋ถ„ ๐Ÿ˜ฑ

์ž๋ฃŒ๊ตฌ์กฐ(heap), ์šฐ์„ ์ˆœ์œ„ ํ ์œ ํ˜•, ์ถ”์ • ๋‚œ์ด๋„๋Š” level 3 - ์‰ฌ์šด 4๊นŒ์ง€

 

์ตœ๊ทผ์— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๋ ˆ๋ฒจ 3 ๋ฌธ์ œ์ธ

'๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ ๋ฌธ์ œ(https://xxilliant.tistory.com/310)'๋ฅผ ํ’€์–ด๋ดค๋˜ ๊ฒŒ ํฐ ๋„์›€์ด ๋˜์—ˆ๋‹ค.

์ด๊ฑฐ ์•ˆํ•ด๋ดค์œผ๋ฉด ใ„นใ…‡ ์‚ฝ์งˆ ์—„์ฒญ ํ–ˆ์„๋“ฏ,,,

 

๋„์ฐฉ์‹œ๊ฐ„์ด ๋˜๋ฉด ๋“ค์–ด์˜ค๋Š” ๊ฐ’๋“ค ์ค‘์—์„œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•ด์ค˜์•ผ ํ•˜๋ฏ€๋กœ priority queue๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ์—ˆ๋‹ค.

์ •๋ ฌ์€ struct ์„ ์–ธ ํ›„, bool operator ํ•จ์ˆ˜๋ฅผ ๋ช…์‹œํ•ด์ฃผ๋ฉด ๋œ๋‹ค ใ… ใ…  ์ด๊ฒŒ ๊ฝค๋‚˜ ์–ด๋ ค์›Œ์„œ ์™ธ์›Œ์•ผ๊ฒ ์Œ

 

 

๋‚˜์˜ ํ’€์ด

#include <string>
#include <vector>
#include <queue>
#include <map>
#include <algorithm>
#include <iostream>
using namespace std;

struct compare{
    bool operator()(const vector<int>& a, const vector<int>& b){
        if(a[0]==b[0]) return a[1] > b[1];
        return a[0] > b[0]; // ์‹œ๊ฐ„์ˆœ์œผ๋กœ ๋“ค์–ด์˜จ ๋‚ด์šฉ ์ค‘์— ์ ์ˆ˜ ์šฐ์„ 
    }
};

bool comp(vector<int> a, vector<int> b){
    if(a[1]==b[1]) return a[0] < b[0];
    return a[1] < b[1]; // ์‹œ๊ฐ„์ˆœ ์ •๋ ฌ
}

// ๋น„์„ ์ , ์šฐ์„ ์ˆœ์œ„=์ ์ˆ˜ ๋‚ฎ์€๊ฑฐ๋ถ€ํ„ฐ
// ์ „์ฒด ์ข…๋ฃŒ์‹œ๊ฐ, [์ ์ˆ˜]์˜ ๋Œ€๊ธฐ์‹œ๊ฐ„ sum
vector<long long> solution(vector<vector<int>> program) {
    sort(program.begin(), program.end(), comp); // ์ ์ˆ˜,์‹œ๊ฐ„,์‹คํ–‰์‹œ๊ฐ„
    vector<long long> answer;
    long long waiting[10] = {0,};
    priority_queue<vector<int>, vector<vector<int>>, compare> pq;
    long long time = 0;
    int isRunning = 0;
    
    int index = 0;
    while(!pq.empty() || index < program.size() || isRunning>0){
        // ์ธ๋ฑ์Šค ๋ฒ”์œ„ && ๋„์ฐฉ ์‹œ๊ฐ„์ด ๋˜๋ฉด push
        while(index < program.size() && time >= program[index][1]){
            pq.push(program[index]);
            index++;
        }
        // ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ด ์—†์œผ๋ฉด
        if(!pq.empty() && isRunning==0){
            vector<int> p = pq.top();
            pq.pop();
            isRunning = p[2];
            // ๋Œ€๊ธฐ์‹œ๊ฐ„ = ์‹œ์ž‘ ์‹œ๊ฐ„ - ๋„์ฐฉ ์‹œ๊ฐ„
            waiting[p[0]-1] += time - p[1];
        }
        time ++;
        if(isRunning>0) isRunning--;
    }
    answer.push_back(time);
    for(long long num: waiting) answer.push_back(num);
    return answer;
}

 

728x90
๋ฐ˜์‘ํ˜•