개발 공부 기록

[Baekjoon 13335번/JAVA] 트럭 (Queue) 본문

PS/Implement

[Baekjoon 13335번/JAVA] 트럭 (Queue)

나만없서고냥이 2023. 10. 26. 12:36

Question

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

 

13335번: 트럭

입력 데이터는 표준입력을 사용한다. 입력은 두 줄로 이루어진다. 입력의 첫 번째 줄에는 세 개의 정수 n (1 ≤ n ≤ 1,000) , w (1 ≤ w ≤ 100) and L (10 ≤ L ≤ 1,000)이 주어지는데, n은 다리를 건너는 트

www.acmicpc.net

 


💡 Solution

time++; : 1초씩 증가시킵니다.

weight -= bridge.poll(); : 1초가 지날 때마다 하나의 트럭이 다리 위에서 빠집니다. (W 길이까지는 0이 빠집니다.)

 

if(!truck.isEmpty()) {} : 다리를 건너지 않은 트럭이 남아있을 경우

if(weight + truck.peek() <= L) : 현재 다리에 올라간 트럭의 무게 + 다리에 올라가지 않은 맨 앞의 트럭의 무게 합이 L을 넘지 않는다면

weight += truck.peek(); : 다음 트럭(다리에 올라가지 않은 맨 앞의 트럭)의 무게를 추가합니다.

bridge.offer(truck.poll()); : 다음 트럭(다리에 올라가지 않은 맨 앞의 트럭)을 다리에 올립니다.

 

else {bridge.offer(0);} : L을 넘는다면 다리 위에 아무것도 올리지 않습니다.

 

위 과정을 다리가 empty일 때까지 반복한 후, 최종적으로 걸린 시간 time을 출력하면 됩니다.

 

💻 Code

package BaekJoon;

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 BJ13335 {
	static Queue<Integer> truck;

	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());
		
		truck = new LinkedList<>();
		st = new StringTokenizer(br.readLine(), " ");
		for(int i = 1; i <= N; i++) {
			truck.offer(Integer.parseInt(st.nextToken()));
		}

		int time = 0;
		int weight = 0;  //다리 위에 올라간 트럭의 무게 합
		Queue<Integer> bridge = new LinkedList<Integer>();
		for(int i = 0; i < W; i++) {
			bridge.add(0);
		}
		
		while(!bridge.isEmpty()) {
			time++;
			weight -= bridge.poll();
			if(!truck.isEmpty()) {
				if(weight + truck.peek() <= L) {
					weight += truck.peek();
					bridge.offer(truck.poll());
				} else { 
					bridge.offer(0);
				}
			}
		}
		System.out.println(time);
	}

}