이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

코딩테스트

[프로그래머스][C++] 튜플

이쿠우우 2022. 3. 21. 21:44
반응형

 

https://programmers.co.kr/learn/courses/30/lessons/64065

 

코딩테스트 연습 - 튜플

"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]

programmers.co.kr

 

글쓴이의 답

개인적인 풀이 임으로

이것보다 더 좋은 알고리즘은 많음...

이렇게도 풀이하는구나.. 공유하기 위해 올림...

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

using namespace std;

vector<int> solution(string s) {
    vector<int> answer;
    
    int count =0;
    for(int i=0; i< s.size()-1; i++){
        if('}' == s[i]){
            count++;
        }
    }    
    vector<vector<int>> result(count);
    
    vector<int> temp;
    string number="";
    for(int i=1; i < s.size(); i++){
        
        if(',' == s[i]){
            if( 0 != number.size()){
                int num = stoi(number);
                number="";
                temp.push_back(num);
            }
        }
        else if('}' == s[i]){         
            if( 0 != number.size()){
                int num = stoi(number);
                number="";
                temp.push_back(num);
                int size = temp.size();
                result[size-1] = temp;
                temp.clear();
            }
        }
        else{
            if(1 == isdigit(s[i])){
                number+=s[i];
            }
        }
    }
    
    
    for(vector<int> temp : result){
        for(int num : temp){
            if(0 == answer.size()){                
                answer.push_back(num);
            }
            else{
                auto it = find(answer.begin(), answer.end(), num);
                if(answer.end() == it){
                    answer.push_back(num);
                }
            }
            
        }        
        
    }
    
    
    
    return answer;
}

꾸준히 하다보면 실력이 늘겠지..

반응형