개발하는 kim-hasa

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

Algorithm/Programmers(c++)

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

kim-hasa 2021. 8. 30. 18:28

https://programmers.co.kr/learn/courses/30/lessons/42583

 

코딩테스트 연습 - 다리를 지나는 트럭

트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈

programmers.co.kr

트럭이 다리를 건너는데 걸리는 시간을 구하는 문제입니다.

 

다리를 큐로 만들어서 무게를 넘기지 않는 선에서 트럭을 큐에 넣습니다.

 

한칸씩 전진해가면서 큐에 점점 넣습니다.

 

마지막에 트럭이 들어가면, 그 트럭은 다리 길이만큼 시간이 걸리기 때문에 반복문을 빠져나와서 다리길이를 더합니다. 

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

using namespace std;

int solution(int bridge_length, int weight, vector<int> truck_weights) {
    int answer = 0;
    int sum = 0;
    int index = 0;
    int front;
    
    queue<int> bridge;      // queue 선언
    
    for(int i=0; i<bridge_length ;i++)
    {
        bridge.push(0);              // 0을 queue에 추가
    }
    
    while(index < truck_weights.size())
    {
        int truck = truck_weights[index];   // 들어가야할 트럭
        
        front = bridge.front();
        sum -= front;
        bridge.pop();               // queue에서 제거
        
        if(sum + truck <= weight)   // 무게를 넘지 않는다면
        {
            bridge.push(truck);
            sum += truck;
            index++;                // 큐에 추가
        }
        else
        {
            bridge.push(0);         // 아닌경우 0 추가
        }
        
        answer++;
    }
    
    answer += bridge_length;        // 마지막으로 들어간 트럭이 나오는데 걸리는 시간 -> 다리의 길이
    
    return answer;
}