kunkunwoo@blog:~$ 거누권의 생각깜지

프로그래머스 _ 문자열 압축

· 배운 것 · 3분 읽기

programmers.co.kr/learn/courses/30/lessons/60057#

코딩테스트 연습 - 문자열 압축

풀이방법

1. 문자를 나누는 숫자 1 ~ 주어진문자열의 길이/2 for문
2. 비교
3. 줄어드는 숫자 = (원래길이) - (나중에 나오는 길이)


코드

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

int solution(string s) {
    int answer = 0;

    //1. 단위
    for(int divNum =1; divNum <=s.length()/2; divNum++)
    {
        int compressionRate = 0;
        
        for (int i = 0; i < s.length();)
        {
            string str = s.substr(i, divNum);
            int cnt = 0;
            for (int j = i; j < s.length(); j += divNum)
            {
                string compareStr = s.substr(j, divNum);
                if (str == compareStr)
                    cnt++;
                else
                    break;
            }

            string repeatStr = to_string(cnt);
            int numberLen = repeatStr.length();

            if (cnt > 1)
                //압축률 = (원래길이) - (나중에 나오는 길이)
                compressionRate += (divNum * cnt) - (divNum + numberLen);
            //건너뛰기!!
            i += cnt * divNum;
        }
        answer = max(compressionRate, answer);
    }

    answer = s.size() - answer;

    return answer;
}

numberLen를 잘못구했는데 눈에 띄지 않아서 ㅋㅋㅋㅋㅋㅋ 시간 좀 많이 날렸다