[백준] 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);
}
}