코딩문제풀이/Baekjoon

[Java] 백준 13335번 : 트럭

코딩하는 포메라니안 2022. 12. 25. 22:45

1. 문제

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

 

 

2. 풀이 과정

1. Truck을 클래스로 선언한다. 속성은 truck의 무게와 다리를 얼마나 건넜는지에 대한 거리 정보 2가지를 가진다.

2. 도착한 트럭이 N개가 될 때까지, simulation을 반복한다.

3. simulation은 도착한 다음 트럭부터 대기중인 트럭(next)까지 돌면서 distance++을 해서 다리를 한칸씩 건너도록 한다.

4. distance가 다리 길이를 넘어서면 도착한 것이고, 다리 위에 있는 트럭의 전체 무게에서 해당 트럭의 무게를 뺀다.

5. next 즉, 대기 중인 트럭이 있을 때, 트럭이 다리 위로 올라갈 수 있는지 확인하고 올라갈 수 있으면 total에 해당 트럭의 무게를 더해준다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    static int N, W, L;
    static Truck[] truck;

    public static class Truck {
        int weight;
        int distance;
        public Truck(int weight) {
            this.weight = weight;
            this.distance = 0;
        }
    }
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());
        W = Integer.parseInt(st.nextToken());
        L = Integer.parseInt(st.nextToken());

        truck = new Truck[N];
        st = new StringTokenizer(br.readLine());
        for(int i = 0; i < N; i++) {
             truck[i] = new Truck(Integer.parseInt(st.nextToken()));
        }

        int next = 0, arrived = 0, total = 0;
        int time = 0;
        while (arrived<N) {

            if(truck[arrived].distance == W){
                total-=truck[arrived].weight;
                arrived++;
            }

            for(int i=arrived; i<next; i++){
                truck[i].distance++;
            }

            time++;

            if(next >= N){ continue;}
            if(total + truck[next].weight <= L){
                total += truck[next].weight;
                truck[next].distance++;
                next++;
            }

        }
        System.out.println(time);
    }
}

 

 

결과