#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(string s) {
int answer = 0;
int until = s.length()/2;
vector<string> arr(until, "");
vector<int> result;
if(s.length() == 1) return 1;
for(int slice=1;slice<=until;slice++)
{
for(int i=0;i<s.length();)
{
int cnt=1;
string fix = s.substr(i,slice);
for(int j=i+slice;j<s.length()+slice;j+=slice)
{
string comp;
if(j < s.length()) comp = s.substr(j,slice);
else comp = " ";
if(fix == comp) cnt++;
else if(cnt > 1){
string tmp = to_string(cnt) + fix;
arr[slice-1] += tmp;
break;
}else {
arr[slice-1] += fix;
break;
}
}
i += cnt*slice;
}
}
for(auto a:arr)
result.push_back(a.length());
answer = *min_element(result.begin(), result.end());
return answer;
}
- 문자열이 n일때에 [ 1 ~ n/2개 ]의 단위로 자를 때 까지 개수를 구한 뒤 최소를 구해야 함
- 3중 for문으로 구조가 구성됨
1) slice for문 : 1 ~ n/2개 단위로 자르는 큰 틀
2) 비교 할 기준이 되는 문자 for문
3) 비교 할 대상이 되는 문자 for문
- 예외로 문자열이 1일 때 바로 return 처리를 해주어야 한다