https://www.acmicpc.net/problem/13335
이 트럭 문제를 풀기 위해서 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 |