[백준] 13335 트럭 [java]

Seongho·2024년 1월 22일
0

백준

목록 보기
21/23

문제

https://www.acmicpc.net/problem/13335

풀이 방법

다리를 큐라고 생각한다.
다리에 트럭이 올라갈 수 있으면 트럭의 무게를 큐에 저장한다. (트럭이 다리에 올라감)
다리에 트럭이 올라갈 수 없으면 0을 큐에 저장한다. (무게가 0인 트럭을 다리에 올림)
큐가 꽉 차면 (다리가 꽉 차면) 큐에서 트럭을 뺀다.
이 매커니즘을 반복하고,
마지막 트럭이 지나가는 시간은 따로 저장해준다.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {


    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
        int truckSize = Integer.parseInt(stringTokenizer.nextToken());
        int length = Integer.parseInt(stringTokenizer.nextToken());
        int maxWeight = Integer.parseInt(stringTokenizer.nextToken());
        stringTokenizer = new StringTokenizer(bufferedReader.readLine());
        int[] truck = new int[truckSize];
        for(int i = 0; i < truckSize; i++){
            truck[i] = Integer.parseInt(stringTokenizer.nextToken());       //트럭의 무게
        }

        Queue<Integer> queue = new LinkedList<>();      //무게 저장

        int time = 0, weightSum = 0;

        for(int i = 0; i < truckSize; i++){
            while(true){
                if(queue.size() == length){             //다리가 꽉 차면 하나 내려줌
                    weightSum -= queue.poll();
                }

                if(weightSum + truck[i] <= maxWeight) break;        //트럭이 올라갈 수 있으면 탈출

                queue.add(0);
                time++;
            }

            weightSum += truck[i];
            queue.add(truck[i]);
            time++;
        }

        time += length;         //마지막 트럭

        System.out.println(time);
    }
}
profile
Record What I Learned

0개의 댓글