Algorithm/programmers

[programmers][Level2][Java] 다리를 지나는 트럭

youn12 2021. 3. 17. 16:21
✏️ Algorithm.

- 주어진 트럭들이 다리를 지나갈 때 걸리는 시간을 구하는 문제

https://programmers.co.kr/learn/courses/30/lessons/42583
제한 조건
입출력


📋 Solved.

1. 트럭이 지나가는 다리(bridege)를 기준으로 구현하였다.
2. 시간 계산(answer)은 다리위에 트럭이 진입(offer)할 때 마다 시간을 1초씩 추가 하였다.
3.  현재 트럭이 다리에 진입할 경우 하중을 초과하면 0 무게의 트럭을 진입 시키면서 시간을 1초씩 추가하였다.
4.  다리위의 트럭 수가 다리 길이와 같아지면 가장 먼저 진입한 트럭 내보냈다(poll).
5.  0 무게의 트럭이 아닌 실제 트럭이 진입(offer(truck))하면 다음 트럭(truck)이 진입 한다.
6.  모든 트럭이 진입하면. 마지막 트럭이 진입한 후 시간(answer) 다리 길이(bridge_length)의 합이 결과값(return)으로 구해진다


✔️ Code.

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

        Queue<Integer> bridege = new LinkedList<>();

        for (int truck : truck_weights) {
            while(true){
                
                if(bridege.isEmpty()){
                    bridege.offer(truck);
                    answer++;
                    break;
                }else{
                    
                    if(bridege.size() == bridge_length){
                        bridege.poll();
                    }
                    
                    int bridegeWeight = getBridegeWeight(bridege);

                    if(bridegeWeight + truck <= weight){
                        bridege.offer(truck);
                        answer++;
                        break;
                        
                    }else if(bridegeWeight + truck > weight){
                        bridege.offer(0);
                        answer++;
                    }
                }

            }
        }
        
        return answer + bridge_length;
    }

    private int getBridegeWeight(Queue<Integer> bridege) {
        int result = 0;
        for (Integer integer : bridege) {
            result += integer;
        }
        return result;
    }
}

'Algorithm > programmers' 카테고리의 다른 글

[programmers][Level1][Java] 신규아이디 추천  (0) 2021.03.25