문제 링크
https://programmers.co.kr/learn/courses/30/lessons/42627
C++ 풀이
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
struct cmp {
bool operator()(vector<int> a, vector<int> b) {
return a[1] > b[1]; //짧은 작업 시간 우선
}
};
int solution(vector<vector<int>> jobs) {
sort(jobs.begin(), jobs.end());
priority_queue<vector<int>, vector<vector<int>>, cmp> pq;
vector <int> temp;
int current_time = 0;
int time_sum = 0;
int index = 0;
int jobsLeft = jobs.size();
while (jobsLeft > 0) {
while ((index < jobs.size()) && (jobs[index][0] <= current_time)) {
pq.push(jobs[index]); //현 시점에서 시작 가능한 작업들만 우선순위 큐에 삽입
index++;
}
if (!pq.empty()) {
temp = pq.top();
if (temp[0] <= current_time) {
time_sum += (current_time - temp[0]) + temp[1];
pq.pop();
jobsLeft--;
current_time += temp[1];
}
else {
current_time = temp[0];
}
}
else { //시작 가능한 작업이 없을 경우, 시간 증가
current_time++;
}
}
return (time_sum / jobs.size());
}
우선순위 큐를 사용하여 풀었다.
현 시점에서 처리 가능한 작업들 중, 가장 소요시간이 짧은 작업을 우선으로 처리하도록 구현하였다.
반응형
'알고리즘 · 코딩' 카테고리의 다른 글
[프로그래머스] 주식가격 (0) | 2020.04.17 |
---|---|
[프로그래머스] 쇠막대기 (0) | 2020.04.14 |
[프로그래머스] N개의 최소공배수 (0) | 2020.04.03 |
[프로그래머스] 최댓값과 최솟값 (0) | 2020.04.03 |
[프로그래머스] 불량 사용자 (0) | 2020.04.01 |