풀이 소요시간 : 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;
}