[백준] 5464: 주차장 - JAVA

https://www.acmicpc.net/problem/5464

풀이

주자창의 칸별로 요금이 책정되어있고, 차량의 무게 * 요금이 해당 차량의 무게가 된다.

ParkingLot이라는 클래스를 만들었다.

주차장의 사이즈를 받아 배열을 선언하고, 메서드로 빈 칸이 있는지 보는 isEmpty(),

차량이 들어올 때 enter(), 차량이 나갈 때 요금정산까지 하는 out()메서드를 만들었다.

동작을 입력받으면서 주차장이 꽉 차서 못들어오는 차량의 대기열로 queue를 이용했다.


메모리: 14724KB

시간: 160ms

언어: Java 11

코드

import java.util.*;
import java.io.*;

public class Main {
    static class ParkingLot {
        int[] spot;

        public ParkingLot(int size) {
            spot = new int[size];
        }

        public boolean isEmpty() {
            for (int i = 0; i < spot.length; i++) {
                if (spot[i] == 0) {
                    return true;
                }
            }

            return false;
        }

        public void enter(int num) {
            for (int i = 0; i < spot.length; i++) {
                if (spot[i] == 0) {
                    spot[i] = num;
                    return;
                }
            }
        }

        public int out(int num) {
            int price = 0;
            for (int i = 0; i < spot.length; i++) {
                if (spot[i] == num) {
                    price = costPerUnit[i] * car[num];
                    spot[i] = 0;
                    break;
                }
            }

            return price;
        }
    }

    static int[] costPerUnit;
    static int[] car;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        costPerUnit = new int[N];
        for (int i = 0; i < N; i++) {
            costPerUnit[i] = Integer.parseInt(br.readLine());
        }

        car = new int[M + 1];
        for (int i = 1; i < M + 1; i++) {
            car[i] = Integer.parseInt(br.readLine());
        }

        ParkingLot parkingLot = new ParkingLot(N);
        int ans = 0;
        Queue<Integer> waitingList = new LinkedList<>();
        for (int i = 0; i < 2 * M; i++) {
            int ops = Integer.parseInt(br.readLine());
            if (ops > 0) {
                waitingList.add(ops);
            } else {
                ans += parkingLot.out(Math.abs(ops));
            }

            while (parkingLot.isEmpty() && !waitingList.isEmpty()) {
                parkingLot.enter(waitingList.poll());
            }
        }

        System.out.println(ans);
    }

}