[백준/BOJ] 백준 22234번 : 가희와 은행
2022. 2. 2. 17:47ㆍ알고리즘 문제풀이
https://www.acmicpc.net/problem/22234
deque를 이용해서 시뮬레이션을 통해 문제를 해결했다
코드
#include <iostream>
#include <vector>
#include <algorithm>
#include <tuple>
#include <deque>
using namespace std;
int n, t, w;
int m;
deque<pair<int, int>> people;
deque<tuple<int, int, int>> input_people;
vector<int> result;
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> n >> t >> w;
for (int i = 0; i < n; i++)
{
int px, tx;
cin >> px >> tx;
people.push_back(make_pair(px, tx));
}
cin >> m;
for (int i = 0; i < m; i++)
{
int px, tx, cx;
cin >> px >> tx >> cx;
input_people.push_back(make_tuple(cx, px, tx));
}
//들어오는 순서가 작은 순서로 정렬
sort(input_people.begin(), input_people.end());
int here_time = 0;
bool finish = false;
while (1)
{
//here_time에 들어오는 손님이 있는지 확인
if (input_people.size() != 0 && get<0>(input_people.front()) == here_time)
{
people.push_back(make_pair(get<1>(input_people.front()), get<2>(input_people.front())));
input_people.pop_front();
}
//앞에 손님 처리
int people_id = get<0>(people.front());
int people_remain = get<1>(people.front());
//t초안에 해당 작업을 모두 처리할 수 있을때
if (people_remain <= t)
{
//남은 시간동안 처리한다
for (int i = 1; i <= people_remain; i++)
{
result.push_back(people_id);
here_time++;
//here_time에 들어오는 손님이 있는지 확인
if (input_people.size() != 0 && get<0>(input_people.front()) == here_time)
{
people.push_back(make_pair(get<1>(input_people.front()), get<2>(input_people.front())));
input_people.pop_front();
}
if (here_time >= w)
{
finish = true;
break;
}
}
//처리한거 뺴기
people.pop_front();
}
//t초안에 해당 작업을 모두 처리할 수 없을때
else
{
//t초 동안만 처리한다
for (int i = 1; i <= t; i++)
{
result.push_back(people_id);
here_time++;
//here_time에 들어오는 손님이 있는지 확인
if (input_people.size() != 0 && get<0>(input_people.front()) == here_time)
{
people.push_back(make_pair(get<1>(input_people.front()), get<2>(input_people.front())));
input_people.pop_front();
}
if (here_time >= w)
{
finish = true;
break;
}
}
//남은만큼 다시 맨 뒤로 넣기
people.pop_front();
people.push_back(make_pair(people_id, people_remain - t));
}
if (finish == true)
break;
}
for (int i = 0; i < result.size(); i++)
{
cout << result[i] << "\n";
}
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 22236번 : 가희와 비행기 (0) | 2022.02.02 |
---|---|
[백준/BOJ] 백준 22235번 : 가희와 수인 분당선 1 (0) | 2022.02.02 |
[백준/BOJ] 백준 5463번 : 건포도 (0) | 2022.02.02 |
[백준/BOJ] 백준 1275번 : 커피숍2 (0) | 2022.02.01 |
[백준/BOJ] 백준 7578번 : 공장 (0) | 2022.02.01 |