누적 주차 시간 ≤ 기본 시간
일 때누적 주차 시간 ≥ 기본 시간
일 때초과한 시간
에 대한 단위 시간 당 요금fee
0 | 1 | 2 | 3 |
---|---|---|---|
기본 시간 | 기본 요금 | 단위 시간 | 단위 요금 |
record
Source Code
#include <string> #include <vector> #include <map> #include <cmath> #include <algorithm> #include <iostream> using namespace std; int calc_money(int time, vector<int> fees) { if(time <= fees[0]) { return fees[1]; } else { int sum = ceil(double (time - fees[0]) / fees[2]) * fees[3]; return fees[1] + sum; } } vector<int> solution(vector<int> fees, vector<string> records) { vector<int> answer; map <string, int> car, money; // 차량번호, 입차 시간 / 차량번호, 요금 for(int i=0; i<records.size(); i++) { int time = stoi(records[i].substr(0, records[i].find(":"))) * 60; time += stoi(records[i].substr(records[i].find(":") + 1, 2)); string number = records[i].substr(records[i].find(" ") + 1, 4); records[i] = records[i].substr(records[i].find(" ") + 6); if(records[i] == "IN") { // 입차된 경우 car.insert(make_pair(number, time)); } else { // 출차할 경우 int sum = time - car[number]; if(money.find(number) != money.end()) { // 이전에 이용한 차량 money[number] += sum; } else { money.insert({number, sum}); } car.erase(car.find(number)); } } for (pair<string, int> now : car) { // 출차되지 않은 차량 int time = 23 * 60 + 59 - now.second; if(money.find(now.first) != money.end()) { money[now.first] += time; } else { money.insert({now.first, time}); } } for (pair<string, int> fee : money) { answer.push_back(calc_money(fee.second, fees)); } return answer; }