https://programmers.co.kr/learn/courses/30/lessons/42627
일단 내풀인데 이거 프로그래머스에서 결과값 이상하게 나오는데 비주얼 스튜디오에선 정상적으로 나옴.
DFS로 풀었는데 다시 풀예정.
#include <algorithm>
#include <vector>
using namespace std;
vector<vector<int>> vvTemp;
vector<vector<int>> vOrder;
bool chk[501] = { false, };
int iResult(0);
int Depth(0);
int timespan(vector<vector<int>> &vTemp)
{
int irrsult(0);
for (int i = 0; i < vTemp.size(); i++)
{
if (i == 0) irrsult += vTemp[i][0] + vTemp[i][1];
else
{
if (irrsult < vTemp[i][0]) irrsult += vTemp[i][1] - vTemp[i][0];
else
{
irrsult += vTemp[i][1] + (irrsult - vTemp[i][0]);
}
}
}
return irrsult /= vTemp.size();
}
void dfs(int iDepth)
{
if (iDepth == Depth)
{
int iTemp = timespan(vOrder);
if (iResult > iTemp) iResult=iTemp;//시간 최소값 구하는 내용입니다.
return;
}
for (int i = 0; i < vvTemp.size(); i++)
{
if (chk[i] == false)
{
chk[i] = true;
vOrder.emplace_back(vvTemp[i]);
dfs(iDepth+1);
vOrder.pop_back();
chk[i] = false;
}
}
}
int solution(vector<vector<int>> &vTemp)
{
Depth = vTemp.size();
dfs(0);
return iResult;
}
[정답]
#include <iostream>
#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;
priority_queue<vector<int>, vector<vector<int>>, compare> pq;
int time = 0; // 현재 시각
int idx = 0; // 우선순위 큐에 들어간 작업의 개수
sort(jobs.begin(), jobs.end()); // 작업이 요청되는 시점이 빠른 순으로 정렬
while (idx < jobs.size() || !pq.empty()) {
// 현재 수행할 수 있는 작업을 모두 우선순위 큐에 넣는다
if (idx < jobs.size() && jobs[idx][0] <= time) {
pq.push(jobs[idx++]);
continue;
}
// 수행할 작업이 있는 경우
if (!pq.empty()) {
time += pq.top()[1];
answer += time - pq.top()[0];
pq.pop();
}
// 수행할 작업이 없는 경우
else {
// 다음 작업이 들어오는 시각으로 변경
time = jobs[idx][0];
}
}
return answer / jobs.size(); // 평균 시간 반환
}