튜플

magicdrill·2025년 4월 2일
0

튜플

문제를 이해하는데 너무 오랜 시간이 걸렸다.
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;
}

0개의 댓글