프로그래머스 - 튜플 (Lv.2)

1 minute read

문제 링크

문제 접근1

  • 가변벡터(board)를 이용해서 길이가 1~n인 집합들의 원소를 담는다.
  • 길이가 짧은 순서대로 탐색하며, 이전 배열에 없던 원소들을 하나씩 answer에 담는다.

구현(All Pass)

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

using namespace std;

vector<int> board[1001];

void set_elements_on_board(string s){
    vector<int> v;
    string str;
    for(int i=0; i<s.length(); i++){
        if(s[i] != '{' && s[i] != '}' && s[i] != ','){
            str.push_back(s[i]);
        }
        else if(s[i]==',' && str.size()>0){
            v.push_back(stoi(str));
            str.clear();
        }
        else if(s[i]=='}' && str.size()>0){
            v.push_back(stoi(str));
            str.clear();
            int len = v.size();
            for(int i=0; i<len; i++)
                board[len].push_back(v[i]);
            v.clear();
        }
    }
}

vector<int> solution(string s) {
    vector<int> answer;
    
    // init
    s = s.substr(1);
    s.pop_back();
    set_elements_on_board(s);
    
    int n = 1;
    while(true){
        if(board[n].size()==0) break;
        for(int i=0; i<board[n].size(); i++){
            if(find(answer.begin(), answer.end(), board[n][i]) == answer.end()){
                answer.push_back(board[n][i]);
            }
        }
        n++;
    }
    
    return answer;
}

  • 무식하게 풀기 방법…

문제 접근2

  • 집합에서 가장 많이 나오는 원소 순서대로 answer 배열에 담는다.

구현(All Pass)

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

using namespace std;

bool cmp(pair<int, int> p1, pair<int, int> p2){
    return p1.second > p2.second;
}

vector<int> solution(string s) {
    vector<int> answer;
    
    string str;
    map<int, int> table;
    for(int i=0; i<s.length(); i++){
        if(isdigit(s[i])) str.push_back(s[i]);
        else if(str.size()>0){
            int ele = stoi(str);
            str.clear();
            if(table.find(ele)==table.end())
                table[ele] = 0;
            else
                table[ele] += 1;
        }
    }
    vector<pair<int, int>> v(table.begin(), table.end());
    sort(v.begin(), v.end(), cmp);
    for(int i=0; i<v.size(); i++)
        answer.push_back(v[i].first);
    
    return answer;
}

Leave a comment