백준 13335 - 트럭
Updated:
Java
13335 번 - 트럭
문제
접근 방법
다리를 Queue라고 생각하고 해결하였다.
만약 길이가 5인 다리가 있다 생각하면 다음과 같이 나타낸다.
0 0 0 0 0
여기서 트럭이 하나 추가되면,
0 0 0 0 5
이후 1초가 지나 트럭이 지나가고 다른 트럭이 하중에 의해 못올라오는 경우 다음과 같이 나타낸다.
0 0 0 5 0
이처럼 다리를 w개 크기만큼 고정되어있는 Queue라고 생각하여 해결하면 풀 수 있는 문제이다.
코드
import java.util.*;
import java.io.*;
public class Main {
static int n, result, w, l;
static Queue<Integer> road, bridge;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk = new StringTokenizer(br.readLine());
n = stoi(stk.nextToken());
w = stoi(stk.nextToken()); // 다리 길이
l = stoi(stk.nextToken()); // 최대 하중
road = new LinkedList<Integer>();
bridge = new LinkedList<Integer>();
stk = new StringTokenizer(br.readLine());
for(int i = 0; i < n; i++) {
road.add(stoi(stk.nextToken()));
}
for(int i = 0; i < w; i++) {
bridge.add(0); // 다리 길이 만큼 채운다.
}
int front, briSum = 0, time = 0;
while(!road.isEmpty()) { // 대기하고 있는 트럭이 모두 다리에 올라 갔을 때 종료
front = road.peek();
briSum -= bridge.poll();
if(briSum + front <= l) { // 현재 선두에서 대기하는 트럭의 무게와 현재 다리의 하중의 합
bridge.add(road.poll()); // 다리에 추가한다.
briSum += front;
}
else {
bridge.add(0); // 빈 공간을 다리에 추가한다.
}
time++;
}
System.out.println(time + w); // 마지막 트럭이 다리에 진입하였으므로, 다리 길이만큼 시간을 더한다.
br.close();
}
static int stoi(String str) {
return Integer.parseInt(str);
}
}