Koala - 12기/코딩테스트 준비 스터디

[백준/C++] 5464번: 주차장

소코기 2023. 11. 20. 02:51
 

5464번: 주차장

시내 주차장은 1부터 N까지 번호가 매겨진 N개의 주차 공간을 가지고 있다. 이 주차장은 매일 아침 모든 주차 공간이 비어 있는 상태에서 영업을 시작하며, 하룻동안 다음과 같은 방식으로 운영

www.acmicpc.net

  • 코드
  • #include <iostream>
    #include <vector>
    #include <queue>
    #include <deque>
    #include <algorithm>
    #include <string>
    using namespace std;

    int main() {

    int n = 0;
    int m = 0;
    int parkingsp[101]={0};
    int parkingcst[101];
    queue <int> car;
    vector <int> carwt;
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
    cin >> parkingcst[i + 1];
    }
    carwt.push_back(-1);
    int weight = 0;
    for (int i = 0; i < m; i++) {
    cin >> weight;
    carwt.push_back(weight);
    }
    int in = 0;
    int cnt = m*2-1;
    cin >> in;
    parkingsp[1] = in;
    int flag = 0;
    int sum = 0;

    while (cnt!=0) {
    string inout;
    cin >> inout;
    flag = 0;
    if (inout[0] != '-') {
    cnt--;

    for (int i = 1; i < n + 1; i++) {
    if (parkingsp[i] == 0) {
    parkingsp[i] = stoi(inout);
    flag = 1;
    break;
    }
    }
    if (flag == 0) {
    car.push(stoi(inout));
    }

    }

    else if (inout[0] == '-') {

    cnt--;
    int out=stoi(inout.substr(1));
    for (int i = 1; i < n + 1; i++) {
    if (parkingsp[i] == out)
    {
    sum += carwt[out] * parkingcst[i];

    parkingsp[i] = 0;

    break;
    }
    }

    if (!car.empty()) {
    for (int i = 1; i < n + 1; i++) {
    if (parkingsp[i] == 0) {
    parkingsp[i] = car.front();
    car.pop();

    }
    }
    }
    }
    }
    cout << sum << '\n';


    }
  • 설명
  • queue와 반복문, 배열을 적절히 사용해야 하는 문제였다. queue에는 대기하는 차를 삽입하고 뻈다. 배열에는 차의 무게와 주차장의 비용을 저장해서 반복문에서 참조했다.