First Come First Served (FCFS) 구현

First Come First Served

#1 입력

  • 첫째 줄 : 입력 받을 스레드 개수
  • 각 스레드 별 입력 데이터
    • 첫 번째 - 스레드 번호
    • 두 번째 - 도착 시간
    • 세 번째 - CPU 사용 시간
  • 입력 예제

4

0 0 40

1 10 25

2 20 30

3 25 5

#2 출력

  • 각 스레드의 대기시간과 완료시간 출력
  • 출력 예제

0 40
30 65
45 95
70 100

#3 구현

#include<iostream>
#include<queue>
#include<vector>

using namespace std;

struct thr {
	int num; // 스레드 번호
	int start_t; // 스레드 도착 시간
	int run; // CPU 사용시간
};

int n; // 입력받을 스레드 개수 저장
vector<pair<int, int>> v; // 대기시간, 완료시간 저장 벡터
queue<thr> ready_q; // 큐에 들어간 스레드

void oper_end() {
	int end = 0;
	while (!ready_q.empty()) {
		thr t = ready_q.front();
		if (end < t.start_t) // 만약 이전 스레드 완료 시간보다 도착 시간이 늦을 경우
			end = t.start_t; // 도착시간으로 변경
		end += t.run; // CPU 사용시간 추가 
		v.push_back({ end - t.start_t - t.run,end }); // 출력을 위해 대기 시간과 완료 시간을 벡터에 저장
		ready_q.pop(); // 완료된 스레드는 큐에서 제거
	}
}

int main() {

	cin >> n;
	thr tmp; // 입력받을 임시 공간
	for (int i = 0; i < n; i++) {
		cin >> tmp.num >> tmp.start_t >> tmp.run; // 순서대로
		ready_q.push(tmp); // 스레드 정보를 큐에 삽입
	} // 스레드 정보 입력

	oper_end(); // 대기 시간 및 완료 시간 연산
	cout << "\\n";

	for (int i = 0; i < v.size(); i++) {
		cout<< v[i].first << " " << v[i].second << "\\n"; // 대기 시간 및 완료 시간 출력
	}
	
	return 0;
}