[프로그래머스] 다리를 지나는 트럭

Jeanine·2022년 6월 26일
0

programmers

목록 보기
4/5
post-thumbnail

💻 C++ 기반

코딩테스트 연습 - 다리를 지나는 트럭
https://programmers.co.kr/learn/courses/30/lessons/42583

✔️ 다리를 건너는 트럭을 위한 큐(crossing_queue) & 대기 트럭을 위한 큐(waiting_queue) 사용
✔️ 최대 적재량 제한때문에 다른 트럭이 다리 위로 못 올라갈 경우, crossing_queue에 0을 push해서 트럭이 움직이는 것을 표현
✔️ 대기 트럭이 하나도 없으면 crossing_queue에 -1을 push해서 종결 조건 만들어주기


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

using namespace std;

int solution(int bridge_length, int weight, vector<int> truck_weights) {
    int answer = 0;
    
    queue<int> waiting_queue;
    for (int i = 0; i < truck_weights.size(); i++)
    {
        waiting_queue.push(truck_weights[i]);
    }
    
    queue<int> crossing_queue;
    int cur_weight = 0;
    while (1)
    {
        if (!crossing_queue.empty() && crossing_queue.front() == -1 && waiting_queue.empty())
        {
            break;
        }
        
        while (crossing_queue.size() < bridge_length)
        {
            answer++;
            
            if (waiting_queue.empty())
            {
                crossing_queue.push(-1);
            }
            else
            {
                if (cur_weight + waiting_queue.front() <= weight)
                {
                    cur_weight += waiting_queue.front();
                    crossing_queue.push(waiting_queue.front());
                    waiting_queue.pop();
                }
                else
                {
                    crossing_queue.push(0);
                }
            }
        }
        cur_weight -= crossing_queue.front();
        crossing_queue.pop();
    }
        
    answer++;
    return answer;
}
profile
Grow up everyday

0개의 댓글