본문 바로가기

ALGORITHM

백준 13335 트럭 (Java)

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