티스토리 뷰

문제 링크

 

코딩테스트 연습 - 튜플

"{{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

 

풀이

처음과 맨 끝에 '{', '}'을 제거하고 '{'를 만나면 안의 숫자들을 map에 할당한 후 map을 순회하면서 개수가 1부터 순서로 하여 answer에 없는 숫자를 넣어주었다.

 

 

더보기
#include <string>
#include <vector>
#include <map>
#include <iostream>
#include <string>

using namespace std;

vector<int> solution(string s) {
    vector<int> answer;
    map<int, vector<int>> count_set;
    map<int, vector<int>>::iterator iter;
    vector<int> temp;
    
    // 처음과 끝의 {} 제거
    s.erase(s.begin());
    s.pop_back();

    // Map 할당
    string element;
    for(int i=0, gradient=0, count = 1; i<s.length(); i++)
    {
        if(s[i]=='{') gradient++;
        else
        {
            if(s[i]=='}')
            {
                temp.push_back(stoi(element));
                count_set[temp.size()] = temp;
                temp.clear();
                element.clear();
                gradient--;
            }
            else if(gradient==1)
            {
                if(s[i]==',')
                {
                    temp.push_back(stoi(element));
                    element.clear();
                }
                else{ element+=s[i];}
            }
            // else{}  // },{
        }
    }
    
    
    // map 순회
    for(iter = count_set.begin(); iter!=count_set.end(); iter++)
    {
    //     for(int i=0; i<iter->second.size(); i++)
    //         cout << "[" << i << " : " << iter->second[i] << "]";
    // cout<<endl;
        int i;
        for(i=0; i<iter->second.size(); i++)
        {
            int j;
            for(j=0; j<answer.size(); j++)
            {
                if(iter->second[i]==answer[j]) break;
            }
            if(j==answer.size()) break;
        }
        answer.push_back(iter->second[i]);
    }
    return answer;
}
728x90
반응형
댓글
01-10 09:46
링크