Stack/Coding test

[C++ / Lv 2] 다리를 지나는 트럭

Seo_re: 2022. 2. 26. 13:08
반응형

 

 

 

 

풀이 코드

#include <string>
#include <vector>
#include <queue>

using namespace std;

int solution(int bridge_length, int weight, vector<int> truck_weights) {
    //first : 트럭 무게
    //second : 다리 진입 시간
    queue<pair<int, int>> bridgeQueue;
    int sec = 1;
    int totWeight = 0;

    for(int i = 0; i < truck_weights.size(); i++, sec++)
    {
        if(bridgeQueue.size() != 0)
        {
            //경과시간이 선두 트럭 통과 시간보다 크면 이미 통과한 트럭이므로 디큐
            if(sec >= bridgeQueue.front().second + bridge_length)
            {
                totWeight -= bridgeQueue.front().first;
                bridgeQueue.pop();
            }
			
            //트럭 무게가 다리 하중을 넘으면 선두 트럭을 디큐하고 선두 트럭 기준으로 시간을 다시 계산한다.
            while(weight < truck_weights[i] + totWeight)
            {
                sec = bridgeQueue.front().second + bridge_length;
                totWeight -= bridgeQueue.front().first;
                bridgeQueue.pop();
            }
        }

        bridgeQueue.push(make_pair(truck_weights[i], sec));
        totWeight += truck_weights[i];
    }

    return bridgeQueue.back().second + bridge_length;
}

 

 

 

 

기타

- 이번 문제는 지문이 너무 불친절해서 지문 이해하는데 오래걸렸다. (지문이 이해가 안간다는 말들이 보이는거 보면 내가 한글을 못하는건 아닌거같다..)

 

 

 

 

 

반응형