#include <string>
#include <vector>
#include <queue>
#include <utility>
using namespace std;
int solution(int bridge_length, int weight, vector<int> truck_weights) {
int answer = 0;
int time = 0;
queue<pair<int ,int> > q;
int i = 0;
int weightSum = 0;
while(1){
// 트럭이 올라설때 마다 시간을 증가시켜준다.
time++;
// pair의 첫번째에는 차의 무게, 두번째에는 들어온 시간을 저장한다.
if(!q.empty()){
pair<int, int> ret = q.front();
// 트럭이 나가야 할 시간이면 pop해준다.
if(time - ret.second >= bridge_length){
q.pop();
weightSum -= ret.first;
printf("%d %d %d\n",ret.first, ret.second,time);
}
}
if(q.empty() && i == truck_weights.size()) break;
// truck을 도로에 추가할 수 있을때
if(i < truck_weights.size() && (weightSum + truck_weights[i] <= weight) && q.size() < bridge_length){
// 트럭 무게합을 구해준다.
weightSum += truck_weights[i];
// 시간과 무게를 pair형으로 넣어준다.
q.push(make_pair(truck_weights[i], time));
// i를 증가시켜 다음 트럭을 확인한다.
i++;
}
}
return time;
}
시간과 같이 비교해가면서 큐에 넣고 값을 찾아가는 과정이 인상적이였다. 문제를 풀때 시간을 맞추는것이 너무 힘들었다. 잘 집중해서 다시한번 복습하자.