본문 바로가기
알고리즘 문제

[알고리즘문제] 프로그래머스 - 튜플

by 박연호의 개발 블로그 2020. 8. 27.

사실 문제 자체가 좀 이해가 안갔다. 이해하고도 이걸 풀라고...?라는 생각이 들었다. 그래서 예제보고 풀었다. 처음에 next_permutation으로 풀 수 있지 않을까 라는 생각을 했다(지금 생각하면 바보같은 생각...). 

 

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

using namespace std;

int comp(string s1, string s2)
{
    return s1.length() < s2.length();
}
vector<int> solution(string s)
{

    string str = s.substr(1, s.length() - 2); // {{4,2,3},{3},{2,3,4,1},{2,3}} -> {4,2,3},{3},{2,3,4,1},{2,3}

    int start = 0;
    int length = 1;
    string temp = ",";

    vector<string> vec;

    for (int i = 0; i < str.length(); i++)
    {
        if (str[i] == '}')
        {
            vec.push_back(temp.substr(2, temp.size())); // {4,2,3 -> 4,2,3
            temp = "";
            length = 1;
            start = i + 1;
        }
        else
        {
            temp += str[i]; // 일단 처음부터 문자를 계속 더해준다.
        }
    }

    sort(vec.begin(), vec.end(), comp); // 문자열 길이가 짧은 순서로 정렬

    vector<int> result;

    for (int i = 0; i < vec.size(); i++)
    {
        str = vec[i];
        // 4,2,3
        // 3
        // 2,3,4,1
        // 2,3
        for (int z = 0; z < str.length(); z++) //
        {
            if (str[z] == ',' || z == str.length() - 1) //,을 만나거나 문자열의 마지막인 경우
            {
                if (z == str.length() - 1) // 마지막 숫자는 무시해버리기 때문에 임의로 넣어준다
                {
                    temp += str[z];
                }

                int num = stoi(temp);                                        // 숫자로 변환
                if (find(result.begin(), result.end(), num) == result.end()) // vector에 없으면 넣어준다
                {
                    result.push_back(num);
                }
                temp = "";
            }
            else
            {
                temp += str[z];
            }
        }
    }

    return result;
}