PS

프로그래머스 - 튜플

728x90

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

 

먼저 입력된 문자열이 집합으로 주어지고, 순서를 무시하고 섞인 값이 들어올 수 있으므로,

각 부분집합이 시작되는 부분(s)과 끝나는 부분(e) 그리고 해당 부분집합이 갖는 숫자의 갯수(cnt)를 담는 벡터

vector<pair<pair<int, int>, int> vec 를 선언하여 담아줬다 

그리고 편의상 입력 문자열 str 의 맨앞과 맨뒤의 {, } 를 제거했다.

 

각 부분집합이 갖는 숫자의 갯수를 오름차순으로 정렬하고 (sort(vec.begin(), vec.end(), comp))

각 부분집합의 숫자 부분만 떼와서 string temp 에 담아 stoi 로 int 형으로 변환하여

answer 에 넣어줬다

이때, answer 에 없는 값이 들어가야 하므로 find() 함수의 결과인 result 가 answer.end() 일때가 

answer 에 없는 값이므로, 이때 넣어주게 한다 (가장 처음엔 아무것도 안들어가서 empty 일때는 그냥 넣어준다)

 

 

- c++

 

#include <algorithm>
#include <iostream>
#include <string>
#include <utility>
#include <vector>
 
using namespace std;
 
bool comp(pair<pair<intint>int>& p1, pair<pair<intint>int>& p2) {
    return p1.second < p2.second;
}
 
vector<int> solution(string str) {
    vector<int> answer; 
    vector<pair<pair<intint>int>> vec; // s, e, cnt
    
    str.erase(01); str.pop_back();
    
    int len = str.length(), cnt = 0, s = 0;
    
    for (int i = 0; i < len; ++i) {
        if (str[i] == '{') s = i;
        else if ('0' <= str[i] && str[i] <= '9') cnt++;
        else if (str[i] == '}') {
            vec.push_back(make_pair(make_pair(s, i), cnt));
            cnt = 0;
        }
    }
    
    sort(vec.begin(), vec.end(), comp);
    
    for(int i = 0; i < vec.size(); ++i) {
        int start = vec[i].first.first, end = vec[i].first.second;
        string temp;
        for (int j = start; j <= end++j) {
            if ('0' <= str[j] && str[j] <= '9') temp.push_back(str[j]);
            if (str[j] == ',' || str[j] == '}' && !temp.empty()) {
                int num = stoi(temp);
                if (answer.empty()) answer.push_back(num);
                else {
                    auto result = find(answer.begin(), answer.end(), num);
                    if (result == answer.end()) answer.push_back(num);   
                }
                temp = "";
            }
        }
    }
    
    return answer;
}
cs

 

 

728x90

'PS' 카테고리의 다른 글

BOJ 1932 - 정수 삼각형  (0) 2020.12.01
BOJ 15898 - 피아의 아틀리에 신비한 대회의 연금술사  (0) 2020.11.30
프로그래머스 - 쿼드압축 후 세기  (0) 2020.11.28
BOJ 11559 - Puyo Puyo  (0) 2020.11.26
프로그래머스 - 카펫  (0) 2020.11.25