공부/알고리즘

2020 카카오 코딩테스트 문자열 압축 c++ solution

토고미 2021. 9. 10. 22:48
#include <string>

using namespace std;

int solution(string s) {
    int answer = s.size();

    for(int i=1; i<s.size(); i++){
        string zip = ""; // 압축된 문자열을 저장할 변수
        string temp = s.substr(0, i); // 압축을 판단할 변수
        int count = 1;
        for(int j=i; j<s.size(); j+=i){
            if(temp == s.substr(j,i)){
            	// 같다면, 압축했을때 표시해줄 숫자 1상승
                count++;
            }else{
            	// 다르다면, temp를 다음 문자로 대체시키고 진행
                if(count > 1) zip += to_string(count);
                zip += temp;
                temp = s.substr(j,i);
                count = 1;
            }
        }

        if(count > 1) zip += to_string(count);
        zip += temp;

        answer = answer < zip.size() ? answer : zip.size();
    }
    return answer;
}

압축한 문자열을 새로 만들 생각을 못하고, 기존의 문자열을 수정할 생각에 갇혀서 못풀었다.

결국 다른 분의 솔루션을 보고 풀었다. zip 변수가 그것이다.

 

참고 : https://yjyoon-dev.github.io/kakao/2020/11/05/kakao-strzip/