BE/algorithm

[프로그래머스] 다리를 지나는 트럭 - 스택/큐

bandal-gom 2021. 7. 18. 14:23

문제링크

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

 

코딩테스트 연습 - 다리를 지나는 트럭

트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈

programmers.co.kr

문제풀이

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        List<Integer> done = new ArrayList<>();
        Queue<Integer> trucks = new LinkedList<Integer>();
        Queue<Integer> bridge = new LinkedList<Integer>();
        for (int truck : truck_weights) {
            trucks.add(truck);
        }

        // initialize queue (adding dummy data)
        for (int i = 0; i < bridge_length; i++) {
            bridge.add(0);
        }

        int answer = 0;
        int sum = 0;
        while (done.size() < truck_weights.length) {
            // 조건 만족
            if (trucks.peek() != null) {
                if (sum + trucks.peek() <= weight) {
                    int curr = trucks.poll();
                    bridge.add(curr);
                    sum += curr;
                }
            }
            if (bridge.size() < bridge_length) {
                bridge.add(0);
            }
            // iteration이 끝나면 빼주기
            int truck = bridge.poll();
            sum -= truck;
            if (truck != 0) {
                done.add(truck);
            }
            ++answer;
        }
        return answer;
    }
}

 

반응형