프로그래머스-다리를 지나는 트럭

EaseTheWorld·2020년 7월 22일
0

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

첫번째 다른사람 풀이 보면 모든 트럭을 1씩 움직이면서 계산하던데 그렇게하면 O(트럭수x다리길이)가 돼서 느리다.
(트럭무게, 도착시간)을 큐에 넣을 수 있을만큼 넣고 하나씩 빼면서 시간을 업데이트하는 식으로 하면 O(트럭수)에 가능하다. 큐가 다 차지 않아도 나올 수 있다는걸 간과해서 좀 삽질을 했다.

    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int totalWeight = 0;
        LinkedList<int[]> q = new LinkedList<int[]>();
        int time = 1;
        int i=0;
        int[] p;
        do {
            // add
            while (i < truck_weights.length && totalWeight + truck_weights[i] <= weight) {
                p = new int[] {truck_weights[i], time+bridge_length};
                totalWeight += truck_weights[i];
                q.offer(p);
                ++time;
                ++i;
                if (q.peek()[1] <= time) // truck arrived before bridge is full
                    break;
            }
            // remove
            p = q.poll();
            totalWeight -= p[0];
            time = p[1];
        } while(!q.isEmpty() || i < truck_weights.length);
        return time;
    }

0개의 댓글