[BOJ] 트럭 - 13335

Kyeongmin·2021년 10월 3일
0

알고리즘

목록 보기
11/24

📃 문제

[BOJ] 트럭 🔗링크


❓ 문제 접근

  1. 시뮬레이션 문제여서
    구현 로직을 트럭이 다리에서 나가는 부분, 들어오는 부분 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;
}
profile
개발자가 되고 싶은 공장장이🛠

0개의 댓글