📃 문제
[BOJ] 트럭 🔗링크
❓ 문제 접근
- 시뮬레이션 문제여서
구현 로직을 트럭이 다리에서 나가는 부분, 들어오는 부분 2단계로 나눴다.
- 트럭이 다리에서 나가는 경우
: 다리에 들어와있는 트럭이 들어온 시간과 현재 시간을 이용하여
다리에서 나가는 경우를 판별한다.
- 트럭이 다리에 들어오는 경우
: 다리에 들어와있는 트럭들의 하중과 들어오게 될 트럭의 하중을 이용해
다리에 들어올 수 있는지를 판별한다.
🧠 풀이
#include <iostream>
#include <queue>
#include <utility>
using namespace std;
int n,w,L,cost;
int nowTime = 0;
int bridgeWeight = 0;
queue<int> onWating;
queue<pair<int,int>> onBridge;
int main(int argc, const char * argv[]) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> w >> L;
for(int i=0; i<n; i++){
cin >> cost;
onWating.push(cost);
}
while(!onWating.empty() || !onBridge.empty()){
nowTime++;
if(!onBridge.empty()){
pair<int,int> truck = onBridge.front();
if(w <= nowTime - truck.second){
bridgeWeight -= truck.first;
onBridge.pop();
}
}
if(!onWating.empty()){
int tWeight = onWating.front();
if(L >= bridgeWeight + tWeight){
bridgeWeight += tWeight;
onBridge.push(make_pair(tWeight, nowTime));
onWating.pop();
}
}
}
cout << nowTime;
return 0;
}