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에는 대기하는 차를 삽입하고 뻈다. 배열에는 차의 무게와 주차장의 비용을 저장해서 반복문에서 참조했다.