import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
Deque<Integer> dq = new LinkedList<>();
for(int i = 0; i < bridge_length; i++) dq.add(0);
int idx = 0;
int sec = 0;
int currWeight = 0;
while(idx < truck_weights.length) {
currWeight -= dq.removeFirst();
if(currWeight+truck_weights[idx] <= weight) {
int w = truck_weights[idx++];
currWeight += w;
dq.addLast(w);
} else {
dq.addLast(0);
}
sec++;
}
return sec + bridge_length;
}
}
다리의 상태를 표현하는 큐를 하나 마련한다.
큐의 길이는 다리의 길이와 같다.
큐의 초기상태는 다리의 길이만큼 0이 삽입되어 있는 상태다.
현재 다리위 트럭의 무게 currWeight를 저장한다.
루프를 돌며 큐에서 트럭의 무게 w 하나씩 꺼내어 currWeight -= w;
(currWeight + 다음 트럭의 무게)가 다리의 최대 무게 wieght 보다 크면 0을, 아니면 다음 트럭의 무게를 큐에 삽입한다.
한 번의 루프가 1초를 의미한다.
루프가 끝나면 큐는 가장 마지막 트럭이 삽입된 상태다.
마지막 트럭이 이제 막 다리에 진입한 상태다.
따라서 다리의 길이만큼 시간을 더해준다.