C++:: 프로그래머스 <다리를 지나는 트럭>

jahlee·2023년 4월 1일
0

프로그래머스_Lv.2

목록 보기
23/106
post-thumbnail

다리가 버틸수있는 범위 내에서 계속 트럭을 넘기면 되는 문제이다. 주의해야할점은 트럭을 먼저 다리에 들여보내지않고 내보내야한다는 점이다.

#include <string>
#include <vector>
#include <deque>
using namespace std;

int solution(int bridge_length, int weight, vector<int> truck_weights)
{
    int answer = 0, bridge_weight = 0;//걸린 시간, 현재 다리위 무게
    deque<int> wait;//대기중인 트럭
    deque<pair<int,int>> bridge;//다리위 트럭
    for(auto c : truck_weights) wait.push_back(c);
    while (!wait.empty() || !bridge.empty())//대기중이거나 다리위에 트럭이 있다면
    {
        if (!bridge.empty() && bridge.front().second == bridge_length)
        {// 다리위 트럭이 다리를 다 지나갔다면
            bridge_weight -= bridge.front().first;//다리위 무게에서 해당 무게를 빼줌
            bridge.pop_front();
        }
        if (!wait.empty() && bridge_weight + wait.front() <= weight)
        {// 다리에 올려도 된다면
            bridge.push_back({wait.front(),0});
            bridge_weight += wait.front();
            wait.pop_front();
        }
        for(int i=0;i<bridge.size();i++) bridge[i].second++;// 트럭 이동
        answer++;
    }
    return answer;
}

0개의 댓글