🔗 다리를 지나는 트럭
import java.util.Queue;
import java.util.LinkedList;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
// bridge_length : 다리에 올라갈 수 있는 최대 트럭 수
// weight : 다리가 견딜수 있는 무게
// truck_weights : 트럭 별 무게
Queue<Integer> bridge = new LinkedList<>();
int time = 0; // 총 걸린 시간
int bridgeWeight = 0; // 다리 위 총 무게
int idx = 0; // 현재 처리할 트럭 인덱스
// 초기 다리 상태: 다리 길이만큼 0으로 채움
for (int i = 0; i < bridge_length; i++) {
bridge.offer(0);
}
while (idx < truck_weights.length) {
time++;
// 다리에서 트럭 한 대 내리기
bridgeWeight -= bridge.poll();
// 새로운 트럭 올릴 수 있다면
if (bridgeWeight + truck_weights[idx] <= weight) {
// 다리에 추가
bridge.offer(truck_weights[idx]);
// 무게 업데이트
bridgeWeight += truck_weights[idx];
// 다음 트럭
idx++;
} else {
// 무게 초과 시, 트럭을 못 올리고 빈 공간 채움
bridge.offer(0);
}
}
// 마지막 트럭이 다리에서 완전히 빠져나가는 시간 추가
return time + bridge_length;
}
}