#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int solution(string s) {
int answer = s.size();
for (int i = 1; i <= s.size(); i++) { // i는 자르는 단위이다. 1개씩 자르는 것부터 시작한다.
string ret = "";
string tmp = s.substr(0, i); // 제일 첫번째 조각을 자른다.
int cnt = 1; // 같은 조각을 카운트 하는 변수다.
for (int j = i; j <= s.size(); j += i) { // substr을 활용하여 i개씩 자른다.
if (tmp == s.substr(j, i)) { // 앞에서 자른 조각과 같다면, 카운트를 증가한다.
cnt++;
}
else { // 앞에서 자른 조각과 다르다면, 이전에 진행했던 압축 결과를 ret에 저장한다.
if (cnt > 1)
ret += to_string(cnt) + tmp;
else
ret += tmp;
tmp = s.substr(j, i);
cnt = 1;
}
}
// 마지막 조각은 for문안에서 처리되지 못함으로 마지막 조각을 따로 처리해준다.
// 참고로 substr(index, size)에서 size가 문자열의 크기를 넘어선다면, index부터 끝까지 잘라서 반환한다.
if (cnt > 1)
ret += to_string(cnt) + tmp;
else
ret += tmp;
answer = min(answer, (int)ret.size()); // 압축한 문자열의 길이가 최소값인지 체크한다.
}
return answer;
}