Algorithm/Programmers

[Lv.2] 다리를 지나는 트럭 : Java

say! 2025. 9. 26. 11:36
728x90

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

 

프로그래머스

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

programmers.co.kr

 

모든 트럭이 다리를 건너려면 최소 몇 초?

최대 bride_length대 올라갈 수 있음

다리는 최대 weight 무게까지 가능

 

다리 길이만큼 이동해야하니까 > 초반에 큐를 다리 길이만큼 0으로 채워서 시작하기

import java.util.*;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        ArrayDeque<Integer> bridge = new ArrayDeque<>();
        int time = 0;          // 경과 시간
        int curWeight = 0;     // 다리 위 총 무게
        int idx = 0;           // 다음에 올라갈 트럭 인덱스

        // 다리 길이만큼 0(빈 칸)으로 채워 시작
        for (int i = 0; i < bridge_length; i++) bridge.offerLast(0);

        // 모든 트럭을 다리에 올릴 때까지 반복
        while (idx < truck_weights.length) {
            time++;

            // 한 칸 전진: 맨 앞 칸이 다리에서 내려감
            curWeight -= bridge.pollFirst();

            // 다음 트럭이 올라갈 수 있으면 올리고, 아니면 빈 칸(0) 추가
            if (curWeight + truck_weights[idx] <= weight) {
                bridge.offerLast(truck_weights[idx]);
                curWeight += truck_weights[idx];
                idx++;
            } else {
                bridge.offerLast(0);
            }
        }

        // 마지막 트럭이 다리를 완전히 건너는 데 남은 시간 추가
        return time + bridge_length;
    }
}

00

07

70

04

45

50

06

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

[Lv.2] 괄호 회전하기 : Java  (0) 2025.09.26
[Lv.2] 문자열 압축 : Java  (0) 2025.09.26
[Lv.2] 짝지어 제거하기 : Java  (0) 2025.09.26
조이스틱 : Java  (1) 2025.07.05
[Lv.2] 기능개발 : Java  (3) 2025.07.05