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

이진용·2023년 3월 24일
0
post-custom-banner

문제 설명

풀이

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초를 의미한다.

루프가 끝나면 큐는 가장 마지막 트럭이 삽입된 상태다.
마지막 트럭이 이제 막 다리에 진입한 상태다.
따라서 다리의 길이만큼 시간을 더해준다.

profile
멋있는 개발자가 되어야지.
post-custom-banner

0개의 댓글