[프로그래머스] C/C++ 다리를 지나는 트럭 Lv2 본문

알고리즘_프로그래머스/기타 문제

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

giron 2021. 10. 4. 16:07
728x90

어렵지 않았던 문제였다. 주의할 점으로는 동일한 시간대일때 트럭이 먼저 빠지고, 새로운 트럭이 들어갈 수 있다는 것이었다. 처음에 두개를 나눠서, 빠지는 데에 1초 + 들어가는데 1초를 해서 어디서 오류가 발생했는지 찾느라 조금 걸렸던것 빼곤 괜찮았다 ^^

#include <string>
#include <vector>

using namespace std;
int currentWeight;
vector<pair<int, int>> carsInBridge; // 다리위에 있는 차들의 무게와 시간

int solution(int bridge_length, int weight, vector<int> truck_weights) {
    int answer = 1;
    for (int i = 0; i < truck_weights.size(); i++) {
        if (!carsInBridge.empty() && carsInBridge[0].second >= bridge_length) { // 다리끝 도착
            currentWeight -= carsInBridge[0].first; //다리 무게 감소
            carsInBridge.erase(carsInBridge.begin()); // 탈출
        }
        if (currentWeight + truck_weights[i] <= weight && carsInBridge.size() + 1 <= bridge_length) { //올라갈수 있다면
            for (int j = 0; j < carsInBridge.size(); j++) {
                carsInBridge[j].second++; // 시간 1초 씩 증가
            }
            carsInBridge.push_back({ truck_weights[i], 1 });
            currentWeight += truck_weights[i];
            answer++;

            continue;
        }
        else {
            for (int j = 0; j < carsInBridge.size(); j++) {
                carsInBridge[j].second++; // 시간 1초 씩 증가
            }
            i--;
            answer++;
        }

    }
    if (carsInBridge.size() > 0) { //마지막 차가 다리 위에 있으면 시간안에 후딱 지나가게 계산해준다.
        answer += (bridge_length - carsInBridge[carsInBridge.size() - 1].second);
    }
    return answer;
}

 

728x90
Comments