본문 바로가기

Algorithm/Programmers

[Programmers] 튜플

안녕하세요. 이번 포스팅에서는 Programmers 튜플 문제를 해결해보도록 하겠습니다.

 

해당 문제는

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

 

위 링크에서 확인하실 수 있습니다.

 

문자열 단순 구현 문제입니다. 문제의 요구조건을 다음의 과정을 통해 해결하였습니다.

 

 

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

 

이러한 입력이 주어졌을 때 두 번의 parsing을 거쳐 분해하였습니다.

 

{1,2,3}

{2,1}

{1,2,4,3}

{2}

 

-> 

 

[1, 2, 3]

[2, 1]

[1, 2, 4, 3]

[2]

 

이제 위의 정보를 통해 리스트를 길이에 따라 오름차순으로 정렬해준 뒤,

 

-> 

[2]

[2, 1]

[1, 2, 3]

[1, 2, 4, 3]

 

순서대로 순회하며, 결과에 추가해주었습니다.

 

<소스 코드>

#include <bits/stdc++.h>
using namespace std;

vector<int> parsing(string s) {
    vector<int> ret;
    string tmp = "";
    
    for(int i = 0; i < s.size(); i++) {
        if(s[i] >= '0' && s[i] <= '9') tmp+=s[i];
        else {
            if(tmp.size()) ret.push_back(stoi(tmp));
            tmp.clear();
        }
    }
    
    return ret;
}
vector<vector<int>> tokenize(string s) {
    vector<vector<int>> ret;
    
    vector<string> toTokenize;
    string res = "";
    for(int i = 0; i < s.size(); i++) {
        if(s[i] == '}') {
            res+=s[i];
            toTokenize.push_back(res);
            res.clear();
            i++;
        } else res+=s[i];
    }
    
    for(auto t : toTokenize) ret.push_back(parsing(t));
    return ret;
}
bool cmp(vector<int>& a, vector<int>& b) { return a.size() < b.size(); }
vector<int> solution(string s) {
    vector<int> answer;
    s = s.substr(1, s.size()-2);
    
    vector<vector<int>> token = tokenize(s); 
    sort(token.begin(), token.end(), cmp);
    
    vector<bool> visited (100004, 0);
    for(int i = 0; i < token.size(); i++) {
        for(int j = 0; j < token[i].size(); j++) {
            int cur = token[i][j];
            if(!visited[cur]) {
                visited[cur] = 1;
                answer.push_back(cur);
            }
        }
    }
    return answer;
}

 

*저의 글에 대한 피드백이나 지적은 언제나 환영합니다. 

'Algorithm > Programmers' 카테고리의 다른 글

[Programmers] 행렬 테두리 회전하기  (0) 2021.10.05
[Programmers] 모두 0으로 만들기  (0) 2021.10.05
[Programmers] 위클리 챌린지 7  (0) 2021.09.23
[Programmers] 보석 쇼핑  (0) 2021.09.10
[Programmers] 단어 변환  (0) 2021.09.07