간단한듯.
현재 다리가 버틸 수 있는 무게
이하라면 트럭이 진입한다.현재 다리가 버틸 수 있는 무게
에서 진입한 트럭의 무게
를 차감한다.현재 다리가 버틸 수 있는 무게
에 빠져나간 트럭의 무게
를 더한다.import java.util.LinkedList;
import java.util.Queue;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int time = 0;
Queue<Integer> waiting = new LinkedList<>();
Queue<Pair> bridge = new LinkedList<>();
for(int i : truck_weights) waiting.offer(i);
while(true) {
time++;
if(!bridge.isEmpty() && time - bridge.peek().t == bridge_length) {
weight += bridge.poll().w;
}
if(!waiting.isEmpty() && waiting.peek() <= weight) {
bridge.offer(new Pair(waiting.peek(), time));
weight -= waiting.poll();
}
if(bridge.isEmpty()) break;
}
return time;
}
}
class Pair{
int w;
int t;
Pair(int w,int t){
this.w = w;
this.t = t;
}
}
if(!waiting.isEmpty() && waiting.peek() <= weight) {
bridge.offer(new Pair(waiting.peek(), time));
weight -= waiting.poll();
}
대기줄 맨 앞의 트럭의 무게
가 현재 다리가 버틸 수 있는 무게
이하라면 진입한다.
다리 큐에 트럭의 무게와 현재시간을 넣는다.
다리위에 트럭이 추가 되었으므로, 현재 다리가 버틸 수 있는 무게
에서 트럭의 무게
를 차감한다.
if(!bridge.isEmpty() && time - bridge.peek().t == bridge_length) {
weight += bridge.poll().w;
}
현재시간 - 트럭이 진입한 시간
이 트럭의 다리위에서 경과한 시간이다.
다리의 길이 1 : 1초 의 비율 이므로 경과한 시간이 다리의 길이와 같다면, 탈출한다.
다리위에서 트럭이 빠졌으므로, 현재 다리가 버틸 수 있는 무게
에 트럭의 무게
를 더한다.
if(bridge.isEmpty()) break;
다리에 트럭이 없을 경우 끝낸다.