programmers 튜플 : programmers.co.kr/learn/courses/30/lessons/64065#qna

 

코딩테스트 연습 - 튜플

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

 

2019 카카오 개발자 겨울 인턴십에 출제된 튜플 문제입니다.

 

솔직히 문제를 어떻게 푸는건지 이해가 되지 않아서,, 접근 방법을 따로 검색해보았습니다.

주어진 문자열 내부의 집합을 원소의 갯수 기준으로 정렬한 후에,

각 집합의 원소에 접근하여 처음 나온 원소이면 기존 튜플의 순서가 되는 것입니다.

 

문제가 이해가 안되서 좀 당황스러운데,.. 왠지 이런 문제가 나오면 못풀것만 같은 느낌..

 

접근방법을 알고 코드만 작성해보았습니다.

파이썬같은 스플릿이나 문자열 처리하는 방법을 따로 공부하지 않아서

직접 원소의 갯수를 파악하고 정렬한 후 set을 이용하여 처리하였습니다.

#include <string>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;

vector<pair<string,int> > v;
set<int> visit;

bool cmp(pair<string,int>& a, pair<string,int>& b){
    return a.second < b.second;
}

vector<int> solution(string s) {
    vector<int> answer;
    
    for(int i = 2; i<s.size()-1; i++){
        string str = "";
        str += s[i];
        int cnt = 0;
        while(s[i+1] != '}'){
            str += s[++i];
            if(s[i] == ',') cnt++;
        }
        i += 3;
        v.push_back({str, cnt});
    }
    
    sort(v.begin(), v.end(), cmp);
    
    for(int i = 0; i<v.size(); i++){
        string str = v[i].first;
        for(int j = 0; j<str.size(); j++){
            int num = str[j]-'0';
            while(j+1<str.size() && str[j+1] != ','){
                num = num*10 + (str[++j]-'0');
            }
            j++;
            if(visit.find(num) == visit.end()){
                visit.insert(num);
                answer.push_back(num);
            }
        }
    }
    
    return answer;
}

'algorithm > programmers' 카테고리의 다른 글

programmers 징검다리 건너기  (0) 2020.12.13
Programmers 불량 사용자  (0) 2020.12.12
programmers 길 찾기 게임  (0) 2020.12.11
programmers 오픈채팅방  (0) 2020.12.10
Programmers 실패율  (0) 2020.12.10

+ Recent posts