ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Programmers] 다리를 건너는 트럭
    Algorithm/Programmers 2020. 5. 30. 18:57

    [Level 2] 다리를 건너는 트럭

    https://programmers.co.kr/learn/courses/30/lessons/42583

    • 트럭은 1초에 1만큼 움직이여, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딥니다. 
    • solution 함수의 매개변수로 다리 길이 bridge_length, 다리가 견딜 수 있는 무게 weight, 트럭별 무게 truck_weights가 주어집니다. 이때 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 return 하도록 solution 함수 완성 하세요

     

     

    Solution

    • waitingQ에서 대기 하는 차의 무게가 다리가 지탱할 수 있는 무게보다 작거나 같을 때 다리위 트럭을 의미하는 onBridge 리스트에 추가한다.
    • while문에서는 시간을 증가하고, onBridge 리스트에 추가하면서 설정했던 트럭의 다리건너는 시간이 time과 일치하면 onBridge 리스트에서 remove해준다. 그리고 count++

     

     

    소스코드

     

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    import java.util.LinkedList;
    import java.util.Queue;
     
    class Solution {
       static Queue<Truck> waitingQ;
        static LinkedList<Truck> onBridge;
        static int answer;
     
        static class Truck {
            private int weight, exit;
     
            public Truck(int weight) {
                this.weight = weight;
                this.exit = 0;
            }
        }
     
        public static int solution(int len, int weight, int[] truck_weights) {
            init();
            for (int i = 0; i < truck_weights.length; i++) {
                waitingQ.offer(new Truck(truck_weights[i]));
            }
            int time = 0, weightSum = 0, count = 0;
            while (true) {
                time++;
                // 다리 위 트럭 시간 체크
                if (!onBridge.isEmpty()) {
                    if (onBridge.getFirst().exit == time) {
                        Truck t = onBridge.removeFirst();
                        weightSum -= t.weight;
                        count++;
                        
                        if(count == truck_weights.length)
                            break;
                    }
                }
                
                if (!waitingQ.isEmpty() && weightSum + waitingQ.peek().weight <= weight) {
                    Truck t = waitingQ.poll();
                    t.exit = time + len;
                    onBridge.addLast(t);
                    weightSum += t.weight;
                }
            }
            answer = time;
            System.out.println(answer);
            return answer;
        }
     
        public static void init() {
            answer = 0;
            onBridge = new LinkedList<>();
            waitingQ = new LinkedList<>();
        }
    }
    cs

     

    'Algorithm > Programmers' 카테고리의 다른 글

    [Programmers] 더 맵게  (0) 2020.05.31
    [Programmers] 쇠막대기  (0) 2020.05.31
    [Programmers] 스킬트리  (0) 2020.05.30
    [Programmers] 프린터  (0) 2020.05.29
    [Programmers] 주식가격  (0) 2020.05.29

    댓글

Designed by Tistory.