Algorithm

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

import java.util.ArrayDeque;
import java.util.Deque;

class 다리를_지나는_트럭 {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 0; // 트럭이 지나면서 걸린 시간
        int nowWeight = 0; // 다리 위에 있는 트럭들의 총 무게
        Deque<Integer> deque = new ArrayDeque<>();

        for (int truck : truck_weights) {
            while (true) {
                if (deque.isEmpty()) { // 다리 위에 트럭이 없을 때
                    deque.offer(truck);
                    answer++;
                    nowWeight += truck;
                    break;
                }

                if (deque.size() == bridge_length) { // 다리 위의 트럭의 개수가 bridge_length와 동일할 때
                    nowWeight -= deque.poll();
                }

                if (nowWeight + truck > weight) {
                    deque.offer(0); // 아무 트럭도 올리지 않음.
                    answer++;
                } else {
                    deque.offer(truck);
                    nowWeight += truck;
                    answer++;
                    break;
                }
            }
        }

        return answer + bridge_length; // 첫번째 올라간 트럭이 다 지나가려면 bridge_length 만큼의 시간이 더해져야한다.
    }
}