Map Container를 활용하여 고유한 Key에 해당하는 Value를 조작하여 문제를 해결한다
Map Container 개념 설명
Map container
임의로 주어지는 주차요금 계산법(Feeds)와 주차장 사용시간을 통해 주차요금을 계산한다.
모든 변수가 Vector로 주어지고, answer또한 Vector라는 점, String을 활용하여 문제를 해결한다.
#include <string>
#include <vector>
#include <map>
#include <iostream>
using namespace std;
vector<int> solution(vector<int> fees, vector<string> records) {
vector<int> answer;
map<string, int> in_time; //입차 시간을 저장하는 map
map<string, int> money; //이용 요금 계산 map
map<string, int> use_time; //이용 시간 계산 map
int first=0; //입차 시간
int second=0; //출차 시간
int time=0; //이용 요금
int fee=0;
for(string record: records){
vector<string> temp; //split된 string을 저장하는 vector
string str; //조각난 string을 저장하는 변수
for(int i=0; i<record.size(); i++){
if(record[i]==' '|| record[i]==':'){ //' '와 :를 통해 split
temp.push_back(str);
str="";
}
else{
str+=record[i];
}
}
temp.push_back(str);
if(temp[3]=="IN"){ //입차 시간을 분으로 map에 저장
in_time[temp[2]]=stoi(temp[0])*60 + stoi(temp[1]);
}
else if(temp[3]=="OUT"){ //출차 시간을 분으로 바꿔 이용 시간을 계산 후 map에 저장
first=in_time[temp[2]];
second=stoi(temp[0])*60 + stoi(temp[1]);
time=second-first;
use_time[temp[2]]+=time;
in_time[temp[2]]=-100; //출차 후 주차장에 남아있지 않은 차량 구분
}
}
for(auto iter:in_time){ //출차 시간이 없는 차량을 23시59분 기준으로 이용시간 계산
if(iter.second>=0){
use_time[iter.first]+=(1439-iter.second);
}
}
for(auto iter:use_time){ //이용시간을 활용한 요금 계산
fee=0;
if(iter.second>fees[0]){
fee+=fees[1];
fee=fee+((iter.second-fees[0])/fees[2])*fees[3];
if((iter.second-fees[0])%fees[2]!=0){ //올림 유무를 판단
fee+=fees[3];
}
}
else{
fee+=fees[1];
}
money[iter.first]=fee;
}
for(auto iter:money){
answer.push_back(iter.second);
}
return answer;
}