#유형 : 스택/큐

#난이도 : lv2

# 다리에 올라온 트럭을 먼저 처리하고, 그 다음 트럭을 올려보내는 순서로 구현하면 된다. 다음 트럭을 올릴 때는 현재 다리의 총 중량과 다음 트럭의 합을 중량한계값과 비교하면 된다.

 

 

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
public static int solution(int bridge_length, int weight, int[] truck_weights) {
        int time = 0;
        
        Queue<Integer> wait = new LinkedList();
        Queue<Point> bridge = new LinkedList();
        for(int i=0; i<truck_weights.length; i++)
            wait.add(truck_weights[i]);
        
        int total=0;
        while(!wait.isEmpty() || !bridge.isEmpty()){
            time++;
            if(!bridge.isEmpty()){
                Point p = bridge.peek();
                if(time - p.y >= bridge_length){
                    total -= p.x;
                    bridge.poll();
                }
            }
            
            if(!wait.isEmpty()){
                if(total + wait.peek() <= weight){
                    int tmp = wait.poll();
                    total += tmp;
                    
                    bridge.offer(new Point(tmp, time));
                }
            }
        }
        
        return time;
    }
cs

+ Recent posts