본문 바로가기
자료구조 & 알고리즘/문제 풀이 (프로그래머스)

다리를 지나가는 트럭 (큐)

by 정구정구 2026. 6. 19.

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 

문제 풀이

  • 트럭이 순서대로 움직이므로 큐를 사용!
  • 트럭이 1초부터 올라간다는 것을 주의

 

 

작성한 코드 (정답)

import java.util.*;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        
        int time = 1;

        Queue<Truck> bridgeQue = new LinkedList<>(); // 다리 위 트럭 큐
        Queue<Truck> trucks = new LinkedList<>(); // 대기 중인 트럭 큐

        // 트럭 배열 큐로 변환
        for (int w : truck_weights) {
            trucks.add(new Truck(0,w));
        }

        while (true) {

            //// 다리 위 트럭 내리기
            if (!bridgeQue.isEmpty() && time - bridgeQue.peek().getOnTime() >= bridge_length) {
                bridgeQue.remove();
            }

            //// 다리 위에 트럭 없고, 올릴 트럭 없으면 종료
            if (trucks.isEmpty() && bridgeQue.isEmpty()) break;

            // 다리 꽉 차면 새 트럭 못 올림
            if (bridgeQue.size() == bridge_length || trucks.isEmpty()) {
                time++;
                continue;
            }
            
            // 새 트럭 다리에 올리기
            int bridgeWeight = bridgeQue.stream().mapToInt(Truck::getWeight).sum();
            Truck truck = trucks.peek();
            if (weight >= bridgeWeight + truck.getWeight()) {
                truck.setOnTime(time);
                bridgeQue.add(truck);
                trucks.remove();
            }

            time++;
        }

        return time;
    }

     public static class Truck {
        private int onTime = 0;
        private int weight = 0;

        public Truck(int onTime, int weight) {
            this.onTime = onTime;
            this.weight = weight;
        }

        public int getOnTime() {
            return onTime;
        }

        public void setOnTime(int onTime) {
            this.onTime = onTime;
        }

        public int getWeight() {
            return weight;
        }

        public void setWeight(int weight) {
            this.weight = weight;
        }
    }
}

 

 

후기

  •  최소 시간이라는 단어를 보고 다리에 올리는 트럭의 순서를 조정하면서 가장 빨리 모든 트럭이 지나가는 시간을 찾는 문제인줄 알고 그리디 알고리즘을 적용했다가 시간을 많이 날려먹었다... 
  •  큐의 사용법에 대해서 다시 한 번 공부하는 계기가 되었다.

'자료구조 & 알고리즘 > 문제 풀이 (프로그래머스)' 카테고리의 다른 글

삼각 달팽이 (델타 배열)  (0) 2026.06.23
가장 큰 수  (0) 2026.06.22
롤케이크 자르기  (0) 2026.06.18
뒤에 있는 큰 수 찾기  (0) 2026.06.17
주차 요금 계산  (0) 2026.06.15