문자열자르는 단위를 1부터 (s의 길이/2)까지 탐색하자. 그 이후에 문자열을 담는 컨테이너를 만들고, 컨테이너의 마지막 인덱스의 값이 같으면 횟수 +1 다르면 push하여 문자열을 만들고 총 길이를 length배열에 넣은다음 최소값을 찾자.
function solution(s) {
let length = [s.length];
let limit = Math.floor(s.length/2);
for(var i =1; i<=limit; i++){
let unit = i;
let idx =0;
let splitArr = []
let k = s.substr(idx, unit);
splitArr.push([k,1]);
idx = unit
while(idx < s.length){
let a = s.substr(idx, unit);
idx+=unit
if(splitArr.at(-1)[0] !== a){
splitArr.push([a,1]);
}else{
let popped = splitArr.pop();
popped[1]++;
splitArr.push(popped);
}
}
let len = 0;
while(splitArr.length){
let pop = splitArr.pop();
if(pop[1] > 1){
let numCount = pop[1].toString().length;
len +=pop[0].length+numCount
}else{
len += pop[0].length
}
}
length.push(len);
}
return Math.min(...length)
}
중복값이 두자리가 넘어가는 경우를 생각하지 못하였다. 중복된 횟수만큼 더해주고, 길이를 구해주면 히든케이스도 모두 통과되었다.