INPUT을 읽어올때, split을 해야겠다고 생각했는데
C++의 string 클래스에는 split 함수가 따로 없어서 직접 만들었다.
나중에 알아보니까 sstream을 사용해서 하는 방법이 있던데
나는 개인적으로 vector 형태로 주는 내 함수가 더 좋으다
보통 C#이나 JAVA 클래스에 내장 되어있던 함수를 직접 짜보고 하니까
문자열 처리가 좀 더 쉬워진 것 같다.
#include <iostream> #include <string> #include <vector> using namespace std; vector<string> split(string text, string d){ vector<string> v; int pos; bool found = 0; pos = text.find(d); if(pos!=string::npos) found=1; while(pos!=string::npos){ v.push_back(text.substr(0, pos)); text = text.substr(pos+1, text.length()-pos); pos = text.find(d); } if(found) v.push_back(text); return v; } class Building{ public: int limit; vector<int> usage; Building(void); Building(int limit); void insert(int u); void printStatus(); }; Building::Building(void){ limit = 0; } Building::Building(int limit){ this->limit = limit; } void Building::insert(int u){ usage.push_back(u); } void Building::printStatus(){ int sum = 0; for(int n : usage){ sum += n; } if(sum > limit) cout << "NO" << endl; else cout << "YES" << endl; } int main(){ int t; cin >> t; vector<Building> b; for(int i=0; i<t; i++){ int limit; cin >> limit; cin.ignore(); string input; getline(cin, input); vector<string> v = split(input, " "); Building building(limit); for(string s : v ){ building.insert(stoi(s)); } b.push_back(building); } for(Building building : b){ building.printStatus(); } }