1. 문제 링크
13335번: 트럭
입력 데이터는 표준입력을 사용한다. 입력은 두 줄로 이루어진다. 입력의 첫 번째 줄에는 세 개의 정수 n (1 ≤ n ≤ 1,000) , w (1 ≤ w ≤ 100) and L (10 ≤ L ≤ 1,000)이 주어지는데, n은 다리를 건너는 트
www.acmicpc.net
2. 문제 및 입출력예제
3. 문제 풀이
1. 트럭 큐에 각 트럭의 무게를 저장한다.
2. 다리의 각 위치마다 트럭 무게를 넣는 큐를 만든다.
2-1. 처음에는 다리에 아무 트럭이 없기 때문에 모든 위치에 0을 넣는다.
3. 시간이 지나면서 다리 위치를 옮기기 위해 다리 큐에서 하나를 뺀다.
4. 지나올 트럭이 남아있으면 최대 하중을 확인한다.
4-1. 지금 순서의 트럭이 추가되어도 최대 하중을 넘지 않으면 올린다. (앞에서 다리 큐 하나를 뺐으니까 추가만 신경쓰면 된다.)
4-2. 최대 하중을 넘을 경우 트럭이 아니라 0을 올린다.
4. 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Queue;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] split = br.readLine().split(" ");
int N = Integer.parseInt(split[0]);
int len = Integer.parseInt(split[1]);
int max = Integer.parseInt(split[2]);
int time = 0;
int weight = 0;
Queue<Integer> truck = new ArrayDeque<>();
Queue<Integer> bridge = new ArrayDeque<>();
split = br.readLine().split(" ");
for(int i=0;i<N;i++) {
truck.offer(Integer.parseInt(split[i]));
}
for(int i=0;i<len;i++) {
bridge.add(0); //각 다리 위치에 있는 트럭 무게
}
while(!bridge.isEmpty()) {
time++;
weight -= bridge.poll(); //시간이 지나니까 다리 위치 하나씩 옮기는 느낌으로 빼기
if(!truck.isEmpty()) {
if(truck.peek()+weight <= max) { //최대하중 확인
int now = truck.poll();
weight += now;
bridge.offer(now);
}
else {
bridge.offer(0); //못 가면 0 올리기
}
}
}
System.out.println(time);
}
}
'ALGORITHM' 카테고리의 다른 글
백준 15565 귀여운 라이언 (Java) (0) | 2023.09.19 |
---|---|
백준 1939 중량제한 (Java) (0) | 2023.09.16 |
백준 2056 작업 (Java) (0) | 2023.09.14 |
백준 2831 댄스 파티 (Java) (0) | 2023.09.12 |
백준 15684 사다리 조작 (Java) (0) | 2023.09.11 |