주차비용을 계산할 때 분단위 요금이기 때문에 주어지는 사용시간을 분단위로 환산해서 계산하면 편하다. 크게 어렵지는 않지만 시간계산 문제여서 조금 까다로울 수 있다.
#include <string>
#include <vector>
#include <map>
#include <cmath>
using namespace std;
vector<int> solution(vector<int> fees, vector<string> records)
{
vector<int> answer;
map<int, int> used_time, logs;
for(auto record : records)
{
int log_time, car_num;
log_time = stoi(record.substr(0,2))*60 + stoi(record.substr(3,2));// 분단위로 변환
car_num = stoi(record.substr(6,4));// 차량 번호
if (record.substr(11) == "IN") logs[car_num] = log_time;// 출입차량이면
else
{// 출차차량이면
used_time[car_num] += log_time - logs[car_num];// 사용시간 넣어주고
logs[car_num] = -1; 기존 시간 초기화
}
}
for(auto log : logs) if(log.second >= 0) used_time[log.first] += 23*60 + 59 -log.second;// 출차하지 않은 차량 시간계산
for(auto c : used_time)
{
int cost;
if (c.second < fees[0]) cost = fees[1];//기본 요금 범위이면
else cost = fees[1] + (int)ceil((double)(c.second - fees[0])/fees[2])*fees[3];
answer.push_back(cost);//추가 요금
}
return answer;
}