트럭의 무게는 truck 큐에 차례로 추가
다리의 길이 만큼 bridge 큐에 모두 0으로 추가
bridgeWeight : 현재 다리의 하중
큐의 확인 연산 메소드 peek()을 알고있다면 바로 풀 수 있는 문제였다.
truck의 무게 + 현재 다리의 하중 <= 다리 최대 하중
이 조건에서 peek()을 생각해내지 못해서 많은 시간을 고민했다.
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 트럭_13335 {
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 w = Integer.parseInt(st.nextToken()); // 다리 길이
int L = Integer.parseInt(st.nextToken()); // 다리 최대 하중
Queue<Integer> truck = new LinkedList<>();
Queue<Integer> bridge = new LinkedList<>();
st = new StringTokenizer(br.readLine());
for(int i = 0; i < n; i++) {
truck.offer(Integer.parseInt(st.nextToken()));
}
for(int i = 0; i < w; i++) {
bridge.offer(0);
}
int bridgeWeight = 0;
int time = 0;
while(!bridge.isEmpty()) {
time++;
bridgeWeight -= bridge.poll();
if(!truck.isEmpty()) {
if(truck.peek() + bridgeWeight <= L) {
bridgeWeight += truck.peek();
bridge.offer(truck.poll());
}
else {
bridge.offer(0);
}
}
}
System.out.println(time);
}
}