백준 5464번: 주차장

Se0ng_1l·2022년 7월 15일
0

백준

목록 보기
37/40

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

📌문제 접근

  1. 주차장에 주차한 차에대한 정보를 저장하기 위해 Park클래스 선언
  2. 주차장에 공간이 있다면 false 없다면 true
  3. 양수가 입력되면 주차를 하려는 것이다.
  4. 반복문을 통해 주차공간의 여부 확인
  5. 없다면 큐를 이용해 push해서 저장한다.
  6. 음수가 입력되면 출차를 하려는 것이다.
  7. 출차처리 하고 만약 큐가 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;
}
profile
치타가 되고 싶은 취준생

0개의 댓글