카카오 - 문자열 압축

phoenixKim·2021년 9월 6일
0

카카오 기출문제

목록 보기
12/24

풀이전략

  • 반복문 안에서 앞과 다음 값을 비교하려는 식으로 진행하려고 했지만, 이렇게 하면
    만약에 뒤에거가 같으면 다다음값과 현재 타겟값을 비교해야 하는데 while문을 돌릴수 밖에 없는 상황이다.
    다른 방법으로 접근해보자!

  • 맨 처음에 초기값을 정한상태에서 진행하는 것이 적합하다.

주의할점

만약에 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개의 댓글

관련 채용 정보