[백준/BOJ] 백준 21773번 : 가희와 프로세스 1

2022. 2. 2. 23:18알고리즘 문제풀이

https://www.acmicpc.net/problem/21773

 

21773번: 가희와 프로세스 1

1초일 때 부터 4초일 때 상황을 그림으로 나타내면 아래와 같습니다. 아래 그림에서 주황색은 특정 시점에 스케쥴러가 선택한 프로세스를 의미합니다.

www.acmicpc.net

우선순위 큐를 사용하여 문제를 해결했고, 해당 프로세스를 제외한 나머지 프로세스의 우선순위가 1 상승하는 것을, 해당 프로세스의 우선순위가 1 감소하는 것으로 했다

 

코드

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

int t, n;
priority_queue<tuple<int, int, int>> pq; //(우선순위, -id, 남은 시간)

int main()
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

	cin >> t >> n;

	for (int i = 0; i < n; i++)
	{
		int a, b, c;
		cin >> a >> b >> c;

		pq.push(make_tuple(c, -a, b));
	}

	for (int i = 0; i < t; i++)
	{
		int value = get<0>(pq.top());
		int id = -get<1>(pq.top());
		int remain = get<2>(pq.top());
		pq.pop();

		cout << id << "\n";

		remain--; //남은시간 감소

		//프로세스의 남은시간이 0보다 클때
		if (remain > 0)
			pq.push(make_tuple(value - 1, -id, remain)); //해당 프로세스를 제외한 나머지 우선순위가 1상승하는것을, 해당 프로세스의 우선순위가 1 감소하는것으로 했다
	}

	return 0;
}