본문 바로가기

c++/프로그래머스

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

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

 

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

트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이

programmers.co.kr

풀이

1. 다리 자체를 queue로 관리한다!!

ex) 트럭 길이는 다 1이고 1초마다 1씩 움직이니까

 -> 트럭이 안들어가면 0 삽입

 -> 트럭이 들어가면 트럭 무게 삽입

 

2. 다리 위에 올라가 있는 트럭 무게 총합을 on_bridge로 관리!

 

3. 기본 for문은 truck 갯수

1) while 루프문 돌리면서 트럭이 다리에 들어갈때까지 반복

  - 트럭이 들어갈 수 있는 상태면 truck 무게 삽입, on_bridge 업뎃

  - 트럭이 들어갈 수 없는 상태면 0삽입

 

4. 마지막 트럭 들어가면 for문이 끝나니까 최종적으로 답은 answer + bridge_length

#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> a;//다리 위 상태
    int truck;
    int on_bridge=0;//다리 위에 올라가있는 트럭들 무게 총합
    for(int i=0;i<truck_weights.size();i++)
    {
        truck = truck_weights[i];
        while(true)
        {
            if(a.empty())//다리가 비어있으면
            {
                a.push(truck);
                answer++;
                on_bridge +=truck;
                break;
            }
            else if(a.size()==bridge_length)
            {
                on_bridge -=a.front();
                a.pop();
            }
            
            if(on_bridge+truck>weight)//트럭이 올라갈 수 없으면
            {
                a.push(0);
                answer++;
            }
            else
            {
                a.push(truck);
                answer++;
                on_bridge +=truck;
                break;
            }
            
        }
    }
    //마지막 트럭이 다리에 올라가는 순간 
    return answer+bridge_length;
}