문제를 이해하는데 너무 오랜 시간이 걸렸다.
ssstream을 사용한 파싱법 말고 string을 사용한 좀 쉬운 파싱을 공부하고, compare()문, find()함수 등을 다시 복습했다.
string과 isdigit()사용한 파싱
while(1){ if(isdigit(s[i])){ //문자가 숫자인지 판단 num += s[i]; i++; } else if(s[i] == ','){ temp.push_back(stoi(num));//문자열을 정수로 파싱해서 벡터에 추가 num = ""; i++; } else if(s[i] == '}'){ temp.push_back(stoi(num));//문자열을 정수로 파싱해서 벡터에 추가 num = ""; break; } }
find()
함수 :#include <algorithm>
필요for(i = 0; i < parsing_tuple.size(); i++){ for(j = 0; j < parsing_tuple[i].size(); j++){ current = parsing_tuple[i][j]; if(find(answer.begin(), answer.end(), current) == answer.end()){//현재 벡터 answer에 current 정수가 존재 안함 answer.push_back(current); } } }
#include <string>
#include <vector>
#include <iostream>
#include <unordered_set>
#include <algorithm>
using namespace std;
bool compare(vector<int> A, vector<int> B){
return A.size() < B.size();
}
vector<int> solution(string s) {
vector<int> answer;
vector<vector<int>> parsing_tuple;
int i, j;
string num = "";
for(i = 0; i < s.length(); i++){
if(isdigit(s[i])) {
vector <int> temp;
while(1){
if(isdigit(s[i])){
num += s[i];
i++;
}
else if(s[i] == ','){
temp.push_back(stoi(num));
num = "";
i++;
}
else if(s[i] == '}'){
temp.push_back(stoi(num));
num = "";
break;
}
}
parsing_tuple.push_back(temp);
}
}
cout << "파싱 결과\n";
for(i = 0; i < parsing_tuple.size(); i++){
for(j = 0; j < parsing_tuple[i].size(); j++){
cout << parsing_tuple[i][j] << " ";
}
cout << "\n";
}
sort(parsing_tuple.begin(), parsing_tuple.end(), compare);
cout << "정렬 결과\n";
for(i = 0; i < parsing_tuple.size(); i++){
for(j = 0; j < parsing_tuple[i].size(); j++){
cout << parsing_tuple[i][j] << " ";
}
cout << "\n";
}
int current;
for(i = 0; i < parsing_tuple.size(); i++){
for(j = 0; j < parsing_tuple[i].size(); j++){
current = parsing_tuple[i][j];
if(find(answer.begin(), answer.end(), current) == answer.end()){//존재 안함
answer.push_back(current);
}
}
}
return answer;
}