티스토리 뷰

728x90

다리의 길이만큼 0 (큐에 들어갈 수 없는 어떤 값)을 큐에 추가하여 다리를 구현하고

매초마다 큐에서 remove와 add를 해주면서 weight와 index를 관리해준다.

 

해당 '초'에 다리에서 트럭이 내려가면(remove 값이 0이 아니면) 새로운 트럭이 올라올 수 있으므로 weight 측정을 가장 먼저 구현해야 한다.

 

해당 문제는 시간이라는 축을 값으로 구현한다는 아이디어만 생각하면 쉬운 문제이지만

이 아이디어를 얻기가 쉽지 않아 고려해야 될 것이 엄청 많게 느껴진다.

 

import java.util.*;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 0;
        //다리의 길이만큼 큐에 0 add.
        //0은 '초'를 의미함.
        var queue = new LinkedList<Integer>();
        for (var i = 0; i < bridge_length; i++) {
            queue.add(0);
        }
        
        var index = 0;
        while (!queue.isEmpty()) {
            //모든 트럭이 다 올라가면 다리가 빌 때까지 시간++.
            if (index == truck_weights.length) {
                while (!queue.isEmpty()) {
                    var temp = queue.remove();
                    answer++;
                }
                break;
            }
            
            var truck = truck_weights[index];
            var now = queue.remove();
            //트럭이 다리에서 제거되면 무게 반환.
            //내리는 트럭이 있으면 그 '초'안에 새로운 트럭이 들어올 수 있음.
            if (now != 0) {
                weight += now;
            }
            //트럭이 다리 위로 올라갈 수 있을 때
            if (weight - truck >= 0) {
                index++;
                queue.add(truck);
                weight -= truck;
            //트럭이 올라가지 못 할 때 
            } else {
                queue.add(0);
            }
            answer++;
        }
        return answer;
    }
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함