본문 바로가기
PS/백준

[백준] 트럭 - Java 13335

by 진꿈청 2024. 10. 24.

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

 

 

큐의 크기를 다리에 들어갈 수 있는 차의 개수로 설정하여,

지속적으로 개수와 크기를 비교하며 큐에 트럭을 더한다.

 

만약, 트럭이 다리를 건널 수 없으면 큐와 `path`에 0을 추가하여 횟수를 카운팅한다.

그리고 마지막에는 큐에 남아있는 값을 확인하여 남이있는 값이 있다면 다리의 길이만큼 더해준다.

 

하지만, 다리가 1인 경우 결국 전체 횟수는 N + 1만큼 걸리므로 바로 반환해준다.(엣지케이스)

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int L = Integer.parseInt(st.nextToken());
        int W = Integer.parseInt(st.nextToken());

        int[] road = new int[N];

        Queue<Integer> q = new LinkedList<>();
        Queue<Integer> waitQ = new LinkedList<>();
        List<Integer> path = new ArrayList<>();

        st = new StringTokenizer(br.readLine());

        for(int i = 0; i < N; i++){
            road[i] = Integer.parseInt(st.nextToken());
        }

        if(L == 1){
            System.out.println(N + 1);
            return;
        }


        for(int i = 0; i < L - 1; i++){
            path.add(0);
            q.add(0);
        }

        int sum = 0;

        for(int i = 0; i < N; ){
            if(q.size() < L && sum + road[i] <= W){
                q.add(road[i]);
                path.add(road[i]);
                sum += road[i];
                i++;
            } else{
                q.add(0);
                path.add(0);
            }

            if(q.size() == L){
                int temp = q.poll();

                if(temp != 0){
                    sum -= temp;
                }
            }
        }

        int count = 0;
        if(!q.isEmpty()){
            count = L;
        }

//        System.out.println(path);
        System.out.println(path.size() + count - (L - 1));
    }
}
//4 2 10
//7 4 5 6