본문 바로가기
프로그래머스

프로그래머스 lv2 - 다리를 지나는 트럭 (자바)

by dragonDeok 2024. 6. 23.
728x90

문제


프로그래머스 lv2 - 다리를 지나는 트럭

풀이


큐 활용

  • 큐를 다리로 생각하고 트럭을 넣고 빼면서 진행
  • 큐의 처음 상태를 다리 길이만큼 0을 넣고 시작해야 함 -> 큐에 있는 트럭을 맨 앞으로 이동시키기 위함
  • 현재 트럭을 태울 때까지 반복문을 돌리면서 상태를 갱신함

어려웠던 점


2번째 풀이 시도 끝에 풀었던 문제이다.
순차적으로 넣고 빼는 걸 구현하는게 생각보다 조건들을 다 해결하기가 까다로웠다.

코드


import java.util.*;
class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int time = 0;
        Queue<Integer> q = new LinkedList<>(); // 다리
        for (int i = 0; i < bridge_length; i++)
            q.add(0);

        int sum = 0; // 현재 다리에 있는 트럭 총 무게
        int cnt = 0; // 현재 다리에 있는 트럭 개수
        for (int w : truck_weights) {
            if (w + sum > weight || cnt >= bridge_length) {
                while (true) {
                    if (q.peek() > 0) cnt--;
                    sum -= q.poll();
                    time++;
                    if (w + sum <= weight && cnt < bridge_length)
                        break;
                    q.add(0);
                }
            } else {
                if (q.peek() > 0) cnt--;
                sum -= q.poll();
                time++;
            }
            q.add(w);
            sum += w;
            cnt++;
        }

        return time + bridge_length;
    }
}