[Programmers] 튜플(Lv.2)

Alice·2023년 8월 5일
0

풀이 소요시간 : 20분

아까 전 문제에서 멘탈이 손상됬는데, 이번 문제에서 회복되었다. 카카오 Lv.2 를 20분만에 풀다니!
확실히 카카오 기출문제를 풀면서 가장 많이 향상된 것은 문자열 다루는 실력이다.


문제는 꽤나 간단히 접근할 수 있었다.

1. 각 집합 별로 vector 를 생성한다.
2. 생성된 vector 를 size 순으로 정렬된다.
3. vector 속 원소를 Visit 체크하며 순회한다.

튜플 내부에 같은 원소는 중복해서 등장하지 않기때문에 쉽게 풀이가 가능했다.


전체 코드

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

using namespace std;

vector<vector<int>> Vector;
int Visit[100001];

bool Cmp(vector<int> &A, vector<int> &B) {
    return A.size() < B.size();
}


vector<int> solution(string s) {
    
    vector<int> Ans;
    vector<int> Temp;
    
    bool Flag = false;
    string token = "";
    
    for(int i = 1; i < s.length() - 1; i++)
    {
        
        if(s[i] == '{') 
        {
            Flag = true;
            continue;
        }
        
        if(Flag == false) continue;
        
        if(s[i] == '}')
        {
            Temp.push_back(stoi(token));
            //해당 집합의 마지막 원소까지 삽입
            Vector.push_back(Temp);
            //해당 집합 삽입
            
            Temp.clear();
            token = "";
            Flag = false;
            continue;
        }
        
        if(isdigit(s[i]) == true)
        {
            token += s[i];
            continue;
        }
        else if(s[i] == ',')
        {
            Temp.push_back(stoi(token));
            token = "";
            continue;
        }

    }
    //vector<vector<int>> 데이터 수집완료
    
    sort(Vector.begin(), Vector.end(), Cmp);
    //vector<int> 요소의 크기 순 정렬
    
    for(int i = 0; i < Vector.size(); i++)
    {
        for(int j = 0; j < Vector[i].size(); j++)
        {
            if(Visit[Vector[i][j]] == 1) continue;
            
            Visit[Vector[i][j]] = 1;
            Ans.push_back(Vector[i][j]);
        }
    }
    //중복 체크 & 원소 하나씩 구하기
    
    
    return Ans;
    
}


profile
SSAFY 11th

0개의 댓글