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

떵호·2022년 2월 7일
0

알고리즘

목록 보기
8/8
post-thumbnail

문제링크
https://programmers.co.kr/learn/courses/30/lessons/42583?language=java

📂 분류

시물레이션

💡 풀이

문제 설명에 트럭의 전진이 안나와있어서 이해하는데 좀 오래걸렸는데 질문목록을 보니 나만 그런게 아니였다.

다리를 큐로 선언하고, 트럭들을 큐에 넣고 빼주는 것을 구현하면 된다.

큐에 트럭을 넣을 수 있는 조건은

  • 큐가 비어있는 경우
  • 큐가 가득차지 않은 경우
  • 무게가 초과 되지않은 경우

이렇게 3가지가 있다.

위 조건이 만족하지 않으면 다음 트럭이 다리는 지날 수 있도록 0을 넣어주면서 poll() 메서드를 이용해 트럭이 다리를 건너도록 해준다.

answer를 반환할 때는 트럭은 1초에 한 칸씩 전진하기 때문에 다리 길이를 더하고 반환한다.

💻 코드

import java.util.*;

class Solution {
    static LinkedList<Integer> bridge = new LinkedList<>();
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 0, totalWeight = 0;

        for (int i = 0; i < bridge_length; i++) {
            bridge.add(0);
        }

        for (int t : truck_weights) {
            while ((totalWeight + t - bridge.peek()) > weight) {
                totalWeight -= bridge.poll();
                bridge.add(0);
                answer += 1;
            }
            totalWeight -= bridge.poll();
            totalWeight += t;
            bridge.add(t);
            answer += 1;
        }

        return answer + bridge_length;
    }
}
profile
꾸준히 해보자❗️

0개의 댓글