
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();
}
}