코딩 공부 1
문제
설명
- “시각 차량번호 내역” 형식으로 주어지는 입/출차 기록으로 주어지는 차량 번호의 누적 주차 시간으로 주차비 계산하는 문제
코드
#include <string>
#include <vector>
#include <map>
using namespace std;
int subValue(int a, int b) {
int tmp = a - b;
return tmp >= 0 ? tmp : -tmp;
}
vector<int> solution(vector<int> fees, vector<string> records) {
vector<int> answer;
string h,m;
int times;
string number;
string action;
string tmp;
int ttp;
int cost;
map<string, int> notes; // 현재 입차 배열
map<string, int> outputs; // 차량번호별 누적 주차 시간 배열
for (int i = 0; i < records.size(); i++) {
tmp = records[i];
times = stoi(tmp.substr(0, 2)) * 60;
times += stoi(tmp.substr(3, 2));
number = tmp.substr(6, 4);
action = tmp.substr(11);
if (action == "IN") {
/*
입차된 경우 차량번호와 입차 시간 저장
제한사항에 이미 있는 차량이 다시 입차되는 경우가 없어 예외처리 하지 않아도 된다.
*/
if (notes.find(number) == notes.end()) {
notes.insert({number, times});
}
} else {
// 출차 시 주차 시간 저장
auto it = notes.find(number);
ttp = subValue(it->second, times);
if (ttp == 0) {
if (outputs.find(number) == outputs.end())
outputs.insert({number, 0});
} else {
if (outputs.find(number) == outputs.end())
outputs.insert({number, ttp});
else
outputs.find(number)->second += ttp;
}
notes.erase(it);
}
}
int endTime = 1439; // 23:59분을 숫자로 저장
// 출차 정보가 없는 차량들을 23:59분 출차한 것으로 계산
for (auto t : notes) {
ttp = subValue(t.second, endTime);
if (outputs.find(t.first) == outputs.end())
outputs.insert({t.first, ttp});
else
outputs.find(t.first)->second += ttp;
}
// 누적된 주차 시간으로 주차비 계산
for (auto output : outputs) {
auto tt = output.second -= fees[0];
cost = fees[1];
if (tt > 0) {
cost += (tt / fees[2]) * fees[3];
if (tt % fees[2] > 0)
cost += fees[3];
}
answer.push_back(cost);
}
return answer;
}
공유하기
Twitter Facebook LinkedIn댓글을 남기시려면 Github 로그인을 해주세요