알고리즘

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

greenkang 2022. 8. 8. 22:50

[풀이방법]

1. 대기중인 트럭이 순서대로 들어있는 큐 wait 생성 = 대기중인 트럭

2. 다리의 길이만큼 0이 들어있는 큐 bridge 생성 = 다리위 트럭

3. 다리위의 트럭이 모두 나갈 때까지 다음을 반복

    3-1) 시간++

    3-2) 다리위의 트럭을 하나 빠져나가게함 (만약 트럭이 없다면 0이 빠져나감)

             -> 현재 다리위 트럭무게 = 다리위의 트럭무게 - 빠져나간 트럭 무게

    3-3) 대기중인 트럭이 존재할 경우 트럭을 더 올릴 수 있으면 다음 트럭을, 아니면 0을 추가

             -> 현재 다리위 트럭무게 = 다리위의 트럭무게 + 올린 트럭 무게 

 

[풀이코드_Java]

import java.util.LinkedList;
import java.util.Queue;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        
        Queue<Integer> wait = new LinkedList<>();  // 대기트럭
        for (int truck: truck_weights) {
            wait.add(truck);
        }
        
        Queue<Integer> bridge = new LinkedList<>(); // 다리 위 트럭
        for (int i = 0; i < bridge_length; i++) {
            bridge.add(0);
        }
        
        
        int time = 0, totWeight = 0;
        while (!bridge.isEmpty()) {
            time++;
            
            int out = bridge.poll();   // 다리를 빠져나감 (out)
            totWeight -= out;
            if (!wait.isEmpty()) {     // 다리에 올라감 (in)
                
                int in = 0;           // default값 0으로 설정
                if ( (totWeight + wait.peek()) <= weight )
                    in = wait.poll(); // 더 올릴 수 있으면 올림
                bridge.add(in);
                totWeight += in;
                
            }
        }
        
        return time;
    }
}