학습(0)/C++ 문제풀이

다리를 지나는 트럭

누가 뭐래도 개발자 2025. 3. 7. 01:19

스택 때 해보려다가 실패하고 큐 연습하고 돌아왔다.

 

반복의 조건을 다시 생각해보았다.

처음의 생각은, 다리/트럭 큐가 빌때까지.

그러나 2번의 경우로 인해 수정하였다.

 

 

곤란했던 부분

1. 다리를 지나는 중을 표현

다리 큐에 넣자마자 pop되는 문제 -> 0을 넣어 해결

 

2. 마지막 트럭

//다리 공간 여유 && 무게 여유 체크 시 트럭이 비어있는 경우를 고려하지 않음.

-> //마지막 트럭이 지나간 시간을 알 수 있으면 해결 가능한 문제이므로 트럭큐가 빌 때까지 진행한다.

 

#include <string>
#include <vector>
#include <deque>

using namespace std;

int solution(int bridge_length, int weight, vector<int> truck_weights) {
    deque <int> trucQue(truck_weights.begin(), truck_weights.end());
    deque <int> bridgeQue(bridge_length, 0); //0 0 7 4 5 6
    int timer = 0;
    int w = weight;

    //1초 동안 발생하는 일
    //다리를 건너는 중, 다리를 다 건넌다.
    
    //마지막 트럭이 지나간 시간을 알 수 있으면 해결 가능한 문제이므로 트럭큐가 빌 때까지 진행한다.
    while (!trucQue.empty())
    {
        //상시: 다리를 지나는 중
        ++timer;
        w += bridgeQue.front();
        bridgeQue.pop_front();

        //다리 공간 여유 && 무게 여유
        if (bridgeQue.size() < bridge_length && w - trucQue.front() >= 0)
        {
            w -= trucQue.front();
            bridgeQue.push_back(trucQue.front());
            trucQue.pop_front();
        }

        //다리 진입 불가할 경우 0으로 채운다.
        else
        {
            bridgeQue.push_back(0);
        }
    }

    int answer = timer + bridge_length;
    return answer;
}

 

 

 

 

'학습(0) > C++ 문제풀이' 카테고리의 다른 글

영어 끝말잇기  (0) 2025.03.07
완주하지 못한 선수  (0) 2025.03.07
컨트롤 Z/프로그래머스 no matching 에러.  (0) 2025.03.05
표 편집, 이어서  (0) 2025.03.03
프로.1.크레인  (0) 2025.03.02