[C++] ALGOSPOT : HOTSUMMER


Image 2

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

}