[프로그래머스][Java] 다리를 지나는 트럭 (Lv.2) - 스택/큐

박현아·2025년 3월 28일
0

programmers-java

목록 보기
35/35

👩‍💻 문제

🙋‍♀️ 답변

import java.util.Deque;
import java.util.ArrayDeque;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        
        int time = 0;
        // 다리 위 총 무게
        int bridgeWeight = 0;
        // 다음에 올라갈 트럭의 index
        int index = 0;
        
        // 1. Queue 사용 (First In First Out)
        // 다리 위에 있는 트럭 queue
        Deque<Integer> queue = new ArrayDeque<>();
        
        // 2. 초기 다리 상태를 0으로 채워서 다리의 길이 유지
        for(int i=0; i<bridge_length; i++) {
            queue.offer(0);
        }
        
        // index가 트럭 개수보다 적거나 다리 위 무게가 0보다 클 때
        while(index < truck_weights.length || bridgeWeight > 0) {
            time++;
            
            // 다리 지나가면 총 무게 감소
            bridgeWeight -= queue.poll();
            
            // 새로운 트럭을 다리에 올릴 수 있는지 확인
            if(index < truck_weights.length && bridgeWeight + truck_weights[index] <= weight) {
                bridgeWeight += truck_weights[index];
                queue.offer(truck_weights[index]);
                index++;
            } else {
                queue.offer(0);
            }
            
        }

        return time;
    }
}

🤔

먼저 다리 위에 올라간 트럭이 먼저 나가야되니까 queue 사용.
ArrayDeque는 양방향 큐로 queue와 stack의 기능 모두 사용할 수 있다.
queue로 사용할 경우, queue.offer(), queue.poll()을 사용하고 stack으로 사용할 경우, stack.push(), stack.pop()을 사용한다.

다리 길이를 어떻게 유지할까 고민했는데 빈 다리에 0을 넣어서 해결했다.

0개의 댓글