No Rules Rules

문자열 압축 (feat. 프로그래머스, 60057번) 본문

생활/코테

문자열 압축 (feat. 프로그래머스, 60057번)

개발하는 완두콩 2022. 7. 20. 14:21
728x90
반응형

 

// woohyeon.kim
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

void convert(const string& text, const int& group_count, vector<string>& out)
{
    if(!out.empty())        out.clear();
    for(int idx = 0 ; idx < text.size() ; idx += group_count)
    {
        out.push_back(text.substr(idx, group_count));
    }
}

int solution(string s) {
    int answer = 0;
    vector<int> tmpl;
    vector<string> token;
    string before;
    for(auto group_index = 1; group_index <= s.size() / 2; ++group_index)
    {
        convert(s, group_index, token);
        string text = "";
        before = token[0];
        auto equal_count = 1;
        for(auto token_index = 1; token_index < token.size(); ++token_index)
        {
            // if equal
            if(token[token_index].compare(before) == 0)
            {
                ++equal_count;
            }
            // if not equal
            else
            {
                if(equal_count != 1)
                {
                    text += to_string(equal_count);
                }
                text += before;
                // replace before text
                before = token[token_index];
                equal_count = 1;
            }
        }
        if(equal_count != 1)
        {
            text += to_string(equal_count);
        }
        text += before;
        tmpl.push_back(text.size());
    }
    if(tmpl.empty())
    {
        tmpl.push_back(s.size());
    }
    answer = *min_element(tmpl.begin(), tmpl.end());
    // min_index = min_element(tmpl.begin(), tmpl.end()) - tmpl.begin();
    // max_index = max_element(tmpl.begin(), tmpl.end()) - tmpl.begin();
    return answer;
}
// *&)*@*

 

저는 가장 큰값과 작은값, 그 값의 위치 등을 알고 싶어서 vector에 담았습니다만

사실 그럴 필요는 없고, 최초 입력받은 값인 s의 길이가 가장 기니까...

text의 문자열이 그보다 작으면 대입해서 리턴하면 더 간단합니다.

 

728x90
반응형
Comments