디스크컨트롤러

108번뇌·2021년 7월 22일
0

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();  // 평균 시간 반환
}
profile
내일 아침 눈을 떳을 때, '기대되는 오늘 하루를 만들기 위해' 나는 오늘도 생각하고 고민한다.

0개의 댓글