상세 컨텐츠

본문 제목

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

💯ProblemSolving/문제 풀이-Java

by :부셔져버린개발자 2025. 1. 15. 15:58

본문

       문제 요약        

- 문제

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

 

프로그래머스

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

programmers.co.kr

 

 

         아이디어        

그대로 Queue 이용해서 구현하면 되는데 

항상 시간과 연관된 문제에서 시간을 어떻게 처리해야 할지 어렵다 

다리에서 트럭이 나가는 시각 = 트럭이 다리에 진입한 시각 +  다리의 길이 

         소스코드        

import java.util.*;
class Solution {
    static int MAX_ENDURE_WEIGHT;
    static int BRIDGE_LENGTH;
    // bridge_length : 다리에 올라갈 수 있는 트럭의 수
    // weight : 다리가 견딜 수 있는 무게
    // truck_weights : 트럭별 무게 
    static int onBridgeWeight = 0;
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        MAX_ENDURE_WEIGHT = weight;
        BRIDGE_LENGTH = bridge_length;
        Deque<Car> bridge = new ArrayDeque<>();
        int time = 0;
        
        int inIdx = 0;
        while(!(bridge.isEmpty() && inIdx >= truck_weights.length)) {
            time += 1;
            outBridge(bridge, time); // 일단 내보낸다 
            if(inIdx < truck_weights.length) { // 새로 다리에 진입할 트럭이 있는가 
                boolean inSuccess = inBridge(bridge, time, truck_weights[inIdx]);
                if(inSuccess){ // 진입에 성공하면
                    inIdx += 1; // 다음 진입할 트럭을 선정한다 
                }
            }
            //System.out.println(time + " : " + bridge + onBridgeWeight);
        }
        
        return time;
    }
    
    // 1. 내보내기
    static void outBridge(Deque<Car> bridge, int curTime) {
        if(!bridge.isEmpty() && bridge.peek().outTime == curTime) {
            onBridgeWeight -= bridge.pollFirst().weight;
        }
    }
    
    // 2. 다리에 올라갈 수 있는지 판단
    static boolean inBridge(Deque<Car> bridge, int curTime, int newTruckWeight) {
        if(onBridgeWeight + newTruckWeight <= MAX_ENDURE_WEIGHT) {
            bridge.addLast(new Car(curTime + BRIDGE_LENGTH, newTruckWeight));
            onBridgeWeight += newTruckWeight;
            return true;
        }
        return false;
    }
    
    static class Car {
        int outTime, weight;
        Car(int outTime, int weight) {
            this.outTime = outTime;
            this.weight = weight;
        }
        @Override
        public String toString(){
            return ""+weight;
        }
    }
}

 

 

728x90

관련글 더보기