Hevton 2023. 8. 7. 00:26
반응형

 

문자열을 자르는게 관건인 문제였다.

#include <string>
#include <vector>
#include <set>
#include <algorithm>

using namespace std;

int cmp(vector<int>& v1, vector<int>& v2) {
    
    return v1.size() < v2.size();
    
}

vector<int> solution(string s) {
    vector<int> answer;
    vector<vector<int>> order;
    set<int> ss;
    
    int len = s.length();
    
    
    vector<int> temp;
    string str = "";
    
    for(int i = 0; i < len; i++) {
        
        if('0' <= s[i] && s[i] <= '9') {
            str += s[i];
        } else if(s[i] == ',' && str.length() > 0) {
            temp.push_back(stoi(str));
            str = "";
        } else if(s[i] == '}') {
            
            if(str.length() > 0)
                temp.push_back(stoi(str));
            
            order.push_back(temp);
            temp.clear();
            str = "";
        }
        
    }
    
    
    sort(order.begin(), order.end(), cmp);
    
    
    
    for(auto o : order) {
        for(auto x : o) {
            if(ss.find(x) == ss.end()) {
                ss.insert(x);
                answer.push_back(x);
            }
        }        
    }
    
    return answer;
}

 

 

다른사람들은 어떤 방식을 사용했나 궁금했다.

문자열 나누는 방식은 뭐 거기서 거기였다. 경우의 수를 막기에 급급한..

 

근데 다른 분의 접근을 보고 새로운 방법을 알게 되었다..

결국 가장 많이 등장한 숫자 순으로 나열해서 리턴해주면 되는 원리였다. 난 왜 생각을 못했지!!

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <map>

using namespace std;

int cmp(pair<int, int>& a, pair<int, int>& b) {
    return a.second > b.second;
}

vector<int> solution(string s) {
    vector<int> answer;
    
    map<int, int> m;
    
    
    string tmp = "";
    for(auto c : s) {
        
        if('0' <= c && c <= '9') {
            tmp += c;
        } else if(tmp.length() > 0) {
            m[stoi(tmp)]++;
            tmp = "";
        }
    }
    
    vector<pair<int, int>> order(m.begin(), m.end());
    sort(order.begin(), order.end(), cmp);
    
    
    for(auto an : order) {
        answer.push_back(an.first);
    }
    
    
    return answer;
}
반응형