오늘의 알고리즘

[C++]2020 KAKAO BLIND RECRUITMENT 문자열 압축(프로그래머스 2레벨)

하늘하늘 . 2022. 1. 21. 02:29
#include <string>
#include <vector>
 
int stringcompression(std::string s, int number)
{
    int size = (int)s.size() / number;
    int snumber = 0;
    std::vector<std::string> vec = {};
    vec.resize(size + 1);
 
    for (int i = 0; i <= size; ++i)
    {
        for (int j = 0; j < number; ++j)
        {
            if (i * number + j < s.size())
                vec[i].push_back(s[i * number + j]);
        }
    }
 
    int count = 0;
    for (int i = 0; i < vec.size() - 1; ++i)
    {
    	// 같은 숫자 세기
        ++count;
 
        while (vec[i] == vec[i + count])
        {
        	// 이전 벡터의 숫자가 숫자 일 때
            if (i != 0 && vec[i - 1][0] >= '0' && vec[i - 1][0] <= '9')
            {
            	// 숫자가 9를 넘을 때 
                int x = stoi(vec[i - 1]);
                ++x;
                vec[i - 1] = std::to_string(x);
            }
            // 숫자가 아닐 때
            else
                vec.insert(vec.begin() + i, std::string("2"));
 
            vec.erase(vec.begin() + i + 1);
        }
 
        count = 0;
    }
 
    std::string a = {};
    for (int i = 0; i < vec.size(); ++i)
    {
        for (int j = 0; j < vec[i].size(); ++j)
        {
            a.push_back(vec[i][j]);
        }
    }
 
    return a.size();
}
 
int solution(std::string s) 
{
    int answer = (int)s.size();
 
    for (int i = 1; i < s.size(); ++i)
    {
        int a = stringcompression(s, i);
        if (a < answer)
            answer = a;
    }
 
    return answer;
}

잘하다가 갑자기 21번 27번 테스트인가? 에서 실패를 하길래 애를 먹은 케이스

처음에는 stoi를 안 쓰고 그냥 숫자를 따로 넣었었다.

그래서 그런지 숫자끼리 같다고 판독을 해버리고 넘어가버린 케이스 찾느라 이것저것 케이스 엄청 넣었다 진자...ㅋㅋㅋㅋ

결국엔 stoi를 넣고 숫자를 아예 하나로 통으로 넣었더니 성공!