-
[SWEA] 진용이네 주차타워Algorithm/SWEA 2020. 4. 5. 14:15
[9280] 진용이네 주차타워
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AW9j74FacD0DFAUY
- 진용이가 운영하는 유료 주차장의 총 수입을 계산하는 프로그램
- 진용이는 오늘 주차장을 이용할 m대의 차량들이 들어오고 나가는 순서를 알고 있다.
- <주차창 운영 방식>
- 차가 주차장에 도착하면 진용이는 주차 공간이 있는지 검사한다.
- 비어있는 공간이 있으면 진용이는 곧바로 주차를 시키며, 주차 가능한 공간 중 번호가 가장 작은 주차 공간에 주차하도록 한다.
- 빈 주차 공간이 있으면 진용이는 곧바로 주차를 시키며, 주차 가능한 공간 중 번호가 가장 작은 주차 공간에 주차하도록 한다.
- 만약 주차를 기다리는 차량이 여러 대라면, 입구의 대기장소에서 자기 차례를 기다려야 한다.
Solution
- in, 비어있는 주차 공간이 있으면 parking
- in, 비어있는 주차 공간이 없으면 add waitList
- out, leave()
- out, waitList에 기다리는 차가 있으면 parking
소스코드
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101import java.util.LinkedList;import java.util.Scanner;public class Solution {static int tc, n, m, result;static Room[] rooms;static Car[] cars;static LinkedList<Integer> inAndOut;static LinkedList<Car> waitList;static class Car{private int room;private int num;private int weight;public Car(int num, int weight){this.room = 0;this.num = num;this.weight = weight;}}static class Room {private int num;private int price;private boolean inUse;public Room(int num, int price) {this.num = num;this.price = price;this.inUse = false;}}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int tn = sc.nextInt();for (int tc = 1; tc <= tn; tc++) {n = sc.nextInt();m = sc.nextInt();init();for (int i = 1; i <= n; i++) {rooms[i] = new Room(i, sc.nextInt());}for (int i = 1; i <= m; i++) {cars[i] = new Car(i, sc.nextInt());}for (int i = 1; i <= 2 * m; i++) {inAndOut.add(sc.nextInt());}result = 0;int index = 0;while (index < 2 * m) {int car = inAndOut.get(index++);// in -> 주차공간 확인if (car > 0) {int roomNum = getRoomNumber();if (roomNum < 0) { // 주차공간이 없으면waitList.add(cars[car]);continue;}parking(roomNum, cars[car]);}// outelse {car = Math.abs(car);leave(car);if(!waitList.isEmpty()) {int roomNum = getRoomNumber();parking(roomNum, waitList.removeFirst());}}}System.out.println("#" + tc + " " + result);}}static void leave(int car) {rooms[cars[car].room].inUse = false;}static void parking(int roomNum, Car car) {rooms[roomNum].inUse = true;car.room = roomNum;result += (rooms[roomNum].price * car.weight);}static int getRoomNumber() {for (int i = 1; i <= n; i++) {if (!rooms[i].inUse)return i;}return -1;}static void init() {rooms = new Room[n+1];cars = new Car[m + 1];waitList = new LinkedList<>();inAndOut = new LinkedList<>();}}cs 'Algorithm > SWEA' 카테고리의 다른 글
[SWEA] 초콜릿과 건포도 (0) 2020.04.15 [SWEA] 시험 (0) 2020.04.05 [SWEA] 탈주범 검거 (0) 2020.03.03 [SWEA] 특이한 자석 (0) 2020.02.21 [SWEA] 올해의 조련사 (0) 2020.02.18