Algorithm

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

dokylee 2020. 8. 7. 01:22

 

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

 

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

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

programmers.co.kr

되게 헤맸던 문제..

그냥 봤을땐 쉬워보이는데 큐에 넣으면서 초를 세는게 헷갈린다.

 

첫번째 포인트는, while(1)을 해놓고 다리에 올라갈 수 없는 트럭이 나오면

그냥 0을 큐에 삽입해서 초가 증가할 수 있게 해주는 것!

 

두번째 포인트는, 다리에 올라갈 수 있는 트럭이 꽉 차서 큐의 맨 앞 트럭을 뺌과 동시에

다리에 올라가 있는 총 트럭의 무게가 감소하고 그와 동시에 다시 새로운 트럭이 삽입된다!!

 

break의 조건은 트럭의 인덱스인데

다 삽입됐을 때, 마지막 트럭은 이제 막 다리에 올라온 것이므로

bridge_length만큼 초를 더해줘야 한다.

 

 

Code

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

using namespace std;

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