문자열 압축

·2021년 9월 6일

카카오 기출문제

목록 보기
12/24

핵심! : 260404

  • substr 을 제대로 알고 있고,

  • 문제에서 주어진 , 반드시 첫번째를 기준으로 하는 조건과

  • word1 vs word2라고 한다면 언제 word1의 문자열을 전부 교체할지를 판단하면 된다.


substr

https://velog.io/@kwt0124/string-substr


주의할점

만약에 aaabbccc이고 cut이 1이라고 한다면
word는 3a2b에서 끝난다. 왜냐하면 for문에서 size() 까지만 돌기 때문이다.
이에 대한 처리를 해야한다.

소스코드

#include <string>
#include <vector>

using namespace std;

int solution(string s) {
    int answer = s.length();
    
    for(int cut = 1; cut <= s.length() / 2; cut++)
    {
        string word1 = s.substr(0, cut);
        int cnt = 1;
        string result = "";
        
        
        //0부터 시작하는 것이 아니라, 그 뒤의 인덱스부터 확인하는 것이므로, cutting된 인덱스를 초기값으로 설정한다. 
        //증감식도 설정해야 한다. 
        string tmp = "";
        for(int i = cut; i < s.length(); i += cut)
        {
            if(s.substr( i , cut ) == word1)
            {
                cnt += 1;
            }
            else
            {
                //기준값을 변경해야 한다.
                
                
                //동일한게 없음!
                if(cnt == 1)
                {
                    tmp = word1;
                }
                else
                {
                    tmp = to_string(cnt) + word1;  
                }
                word1 = s.substr(i, cut);
                cnt = 1;
                result += tmp;
            }
        }
        
        //이 부분 중요하다...
        if(cnt == 1)
        {
            tmp = word1;
        }
        else
        {
            tmp = to_string(cnt) + word1;  
        }
        
        result += tmp;
        if(answer > result.length())
            answer = result.length();
        
    }
    
    return answer;
}
profile
🔥🔥🔥

0개의 댓글