알고리즘

[boj13335/Java] 트럭(Queue 사용법)

IT 참다랑어 2023. 7. 24. 14:59

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

 

이 트럭 문제를 풀기 위해서 Java에서의 Queue 에 대한 사용법을 먼저 살펴봤다.

Queue는 기본적으로 FIFO(선입선출)의 특징을 가지며 제일 먼저 삽입된 값이 제일 먼저 제거된다.

 

java에서 Queue의 선언은 다음과 같다.

import java.util.Queue;
import java.util.LinkedList;

Queue<Integer> queue = new LinkedList<>();

 

삽입, 삭제, 헤드 조회를 위한 함수를 정리해보면 다음과 같다.

기능 예외 발생 값 리턴
삽입(Insert) add(e) offer(e)
삭제(remove) remove() poll()
조회(top) element() peek()

 

다리를 길이가 w인 하나의 Queue라고 생각했을 때 트럭이 들어왔다가 나간다는 것을 생각했다.

그리고 이 때 다리 위 트럭의 무게를 관리하기 위해서 하나의 변수를 두고 해당 변수에 트럭이 빠져나가는 경우, 트럭이 들어오는 경우에 현재 무게를 업데이트할 수 있도록 코드를 작성했다.

 

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 Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		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<>();
		
		int t = 0, bridgeWeight = 0;
		
		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.add(0);
		}
		
		while(!bridge.isEmpty()){
			t++;
			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(t);
	}

}

 

'알고리즘' 카테고리의 다른 글

[boj17144/Java] 미세먼지 안녕!  (0) 2023.07.26
[boj5397/Java] 키로거(Stack)  (0) 2023.07.24
[boj2477/Java] 참외밭  (0) 2023.07.20
[boj3474/JAVA] 교수가 된 현우  (0) 2023.07.20
[boj2607/Java] 비슷한 단어  (0) 2023.07.17