끄적끄적 코딩
article thumbnail
Published 2023. 2. 13. 20:00
[Java] 백준 13335번 트럭 알고리즘
728x90

모든 트럭들이 다리를 건너는 최단 시간을 구하는 문제입니다.

큐에 트럭을 넣을때 트럭 무게를 합해주고 큐에서 뺄 때 해당 트럭 무게를 빼주었습니다.
다리위에 있는 트럭들 + 현재 트럭 <= 다리하중 이라면 현재트럭을 큐에넣어줍니다.
다리를 건너는 시간이나 공백의 경우 빈 값을 큐에 넣어주었습니다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int n = Integer.parseInt(st.nextToken());
		int w = Integer.parseInt(st.nextToken());
		int l = Integer.parseInt(st.nextToken());
		int ans = 0;
		int[] truck = new int[n];
		
		st = new StringTokenizer(br.readLine());
		for(int i=0; i<n; ++i) {
			truck[i] = Integer.parseInt(st.nextToken());
		}
		int weight = 0;
		Queue<Integer> q = new LinkedList<>();
		for(int i=0; i<w; ++i) {
			q.add(0);
		}
		
		int index = 0;
		while(!q.isEmpty()) {
			++ans;
			weight -= q.poll();
			if(index >= truck.length) {
				continue;
			}
			if(weight + truck[index] <= l) {
				weight += truck[index];
				q.add(truck[index]);
				++index;
			} else {
				q.add(0);
			}
		}
		
		
		bw.write(ans + "");
		bw.close();
	}
}

검색 태그