~cpp // 깔 걸 각 .. // OOP . // 근 --; 겠 // .. 그 map . map<int,int> 값 traffic, 값 , . // --; //Traffic 거 고(data holder) 고 . C struct . // (intelligence) 거, (responsibility) //거 까 . --JuNe #include <iostream> #include <fstream> #include <vector> #include <cmath> #include <map> using namespace std; class Traffic; class Airport; class Admin; class Traffic { private : int _departureGateNum; int _arrivalGateNum; int _passengerNum; public : Traffic(int departureGateNum, int arrivalGateNum, int passengerNum) : _departureGateNum(departureGateNum), _arrivalGateNum(arrivalGateNum), _passengerNum(passengerNum) {} int getPassengerNum() const { return _passengerNum; } int getDepartureGateNum() const { return _departureGateNum; } int getArrivalGateNum() const { return _arrivalGateNum; } }; class Airport { private: enum { DISTANCE = 1 }; vector<Traffic> _traffics; vector<int> _arrivalGateNums; vector<int> _departureGateNums; int _totalTraffic; int _numCity; public : Airport(int numCity) : _numCity(numCity) { _arrivalGateNums.resize(_numCity); _departureGateNums.resize(_numCity); } void addTrafficData(const Traffic& traffic) { _traffics.push_back(traffic); } int getTrafficAmount(const Traffic& traffic) const { return traffic.getPassengerNum(); } void eraseGateOrder() { _arrivalGateNums.clear(); _departureGateNums.clear(); } int getDistance(const Traffic& traffic) const { int ar, dp; for(int i = 0 ; i < _departureGateNums.size(); ++i) { if( _departureGateNums[i] == traffic.getDepartureGateNum() ) { dp = i; for(int j = 0 ; j < _arrivalGateNums.size(); ++j) { if( _arrivalGateNums[j] == traffic.getArrivalGateNum() ) { ar = j; break; } } break; } } return DISTANCE + abs(ar-dp) * DISTANCE; } int getTotalTraffic() { int total = 0; for(int i = 0 ; i < _traffics.size() ; ++i) total += getDistance(_traffics[i]) * getTrafficAmount(_traffics[i]); _totalTraffic = total; return _totalTraffic; } void addArrivalGate(int num) { _arrivalGateNums.push_back(num); } void addDepartureGate(int num) { _departureGateNums.push_back(num); } }; class Admin { private : map<int, int> _trafficAmountCollection; public : Admin() { runProcess(); } void runProcess() { ifstream fin("airport.in"); while(1) { int numCity; fin >> numCity; if(!numCity) break; Airport airport(numCity); int departureNum, iterateNum, arrivalNum, trafficAmount; for(int i = 0 ; i < numCity ; ++i) { fin >> departureNum; fin >> iterateNum; for(int j = 0 ; j < iterateNum ; ++j) { fin >> arrivalNum; fin >> trafficAmount; Traffic traffic(arrivalNum, departureNum, trafficAmount); airport.addTrafficData(traffic); } } int testCaseNum, gateNum, testCount = 0; cout << "ConfigurationtLoad" << endl; while(1) { fin >> testCaseNum; if(!testCaseNum) break; for(int i = 0 ; i < numCity ; ++i) { fin >> gateNum; airport.addArrivalGate(gateNum); } for(int i = 0 ; i < numCity ; ++i) { fin >> gateNum; airport.addDepartureGate(gateNum); } _trafficAmountCollection[airport.getTotalTraffic()] = testCaseNum; ++testCount; airport.eraseGateOrder(); } showTrafficAmount(); } } void showTrafficAmount() { for(map<int, int>::iterator j = _trafficAmountCollection.begin() ; j != _trafficAmountCollection.end() ; ++j) { cout << "t" << j->second << "t" << j->first << endl; } _trafficAmountCollection.clear(); } }; int main() { Admin gogo; return 0; }