본문 바로가기

코딩테스트/프로그래머스

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

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

 

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

 

 

// 너무 어렵다 연습이 필요할듯
// 일단 시간은 흐른다. 현재 시간에서 넣은 시간을 빼서 그게 맞으면 트럭을 넣는 큐에서 빼주고
// 아니면 들어갈 수 있나 확인하고 만약 마지막이면 다리 길이만큼 시간에 더한다. 트럭 큐와 넣은 시간을 시간큐에 넣어준다. 


// 트럭넣는 큐 q와 시간넣는 큐 t를 두개 만든다.
// while문을 돌려서 시간 증가시키고 현재 시간에 큐 처음 들어갔을때 시간 큐를 빼서 그게 다리 길이와 같은지 확인
// 새로 넣을 것과 현재까지 들어간 무게가 weight 이하인지 확인한다. 이 조건문 안에서 만약 트럭이 하나 남았을 경우에는 바로 그냥 다리 길이 만큼 더해준다음 종료
// 하나 남지 않은 경우에는 q와 t에 각각 push하고 sum에 현재 들어간거 더해주고 idx++한다.
#include <string>
#include <vector>
#include <queue>

using namespace std;

int solution(int bridge_length, int weight, vector<int> truck_weights) {
    queue <int> q;
    queue <int> t;
    int sum = 0;
    int time = 0;
    int truckIdx = 0;
    
    while(1){
        
        time++;
        
        if (time - t.front() == bridge_length){
            sum -= q.front();
            q.pop();
            t.pop();
        }
        
        if (sum + truck_weights[truckIdx] <= weight){
            
            if (truckIdx == truck_weights.size() - 1){
                time += bridge_length;
                break;
            }
            q.push(truck_weights[truckIdx]);
            t.push(time);
            sum += truck_weights[truckIdx];
            truckIdx++;
        }
    
    }
    
    return time;
}

 

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] 프린터  (0) 2023.07.07
[프로그래머스] 기능개발  (0) 2023.07.07
[프로그래머스] 탑  (0) 2023.07.07
[프로그래머스] 베스트앨범  (0) 2023.07.07
[프로그래머스] 위장  (0) 2023.07.06