문제

설명

  • “시각 차량번호 내역” 형식으로 주어지는 입/출차 기록으로 주어지는 차량 번호의 누적 주차 시간으로 주차비 계산하는 문제

코드

#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;
}

댓글을 남기시려면 Github 로그인을 해주세요