https://school.programmers.co.kr/learn/courses/30/lessons/60057
침착하게 규칙을 찾으면 해결되는 문제.
문제에서 추출할 수 있는 정보는 다음과 같다.
이때 동일한 경우가 2번 감지되는 "aaa"의 경우 앞에 붙는 숫자가 "3"임에 주의한다. 이 케이스를 생각해주지 않으면 만약 aaaaaaaaaa의 경우 9번 감지되지만 10a이기 때문에 오답이 발생하게 된다.
#include <string>
#include <iostream>
#include <vector>
using namespace std;
int solution(string s) {
int answer = s.size();
int maxcutsize = s.size()/2;
for(int a=1; a<=maxcutsize; a++){
int nowlen = s.size();
int cnt = 0;
for(int i=0; i<s.size()-a; i+=a){
string target = s.substr(i, a);
string next = s.substr(i+a, a);
if(target == next){
cnt++;
nowlen -= a;
} else {
if(cnt > 0) nowlen += to_string(cnt+1).size();
cnt = 0;
}
}
if(cnt > 0) nowlen += to_string(cnt+1).size();
cnt = 0;
answer = min(answer, nowlen);
}
return answer;
}