https://www.acmicpc.net/problem/5464
- 주차장에 주차한 차에대한 정보를 저장하기 위해 Park클래스 선언
- 주차장에 공간이 있다면 false 없다면 true
- 양수가 입력되면 주차를 하려는 것이다.
- 반복문을 통해 주차공간의 여부 확인
- 없다면 큐를 이용해 push해서 저장한다.
- 음수가 입력되면 출차를 하려는 것이다.
- 출차처리 하고 만약 큐가 empty가 아니라면 큐를 팝하여 차량에 대한 정보를 방금 출차된 공간에 넣는다.
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
class Park{
public :
int carNum;
bool parking = false;
};
int main()
{
int n, m; // n : 주차 공간 m : 차량 수
cin >> n >> m;
vector<int> charge; // 단위 무게당 요금
vector<int> weight; // 무게
queue<int> waiting;
int money = 0;
Park park[100];
int num;
for(int i = 0; i < n; i++)
{
cin >> num;
charge.push_back(num);
}
for(int i = 0; i < m; i++)
{
cin >> num;
weight.push_back(num);
}
for(int i = 0; i < 2 * m; i++)
{
cin >> num;
if(num > 0)
{
int j = 0;
while(j < n)
{
if(!park[j].parking)
{
park[j].parking = true;
park[j].carNum = num;
money += charge[j] * weight[num - 1];
break;
}
j++;
}
if(j == n)
waiting.push(num);
}
else
{
num *= -1;
int k = 0;
for(k = 0; k < n; k++)
{
if(park[k].carNum == num){
park[k].parking = false;
break;
}
}
if(!waiting.empty())
{
park[k].parking = true;
park[k].carNum = waiting.front();
money += charge[k] * weight[waiting.front() - 1];
waiting.pop();
}
}
}
cout << money;
}