function solution(s) {
if(s.length == 1) return 1
let answer = [];
for(let i = 1; i<= s.length / 2; i++) {
let j = 0;
let str = '';
let cnt = 1;
while(j < s.length) {
if(s.slice(j,j+i) != s.slice(j + i,j + 2*i)) {
str += cnt > 1 ? cnt + s.slice(j,j+i) : s.slice(j,j+i);
cnt = 1;
j += i
continue
}
cnt++;
j += i
}
answer.push(str.length)
}
return Math.min(...answer)
}
가능한 압축 경우의 수를 모두 고려하여 압축된 길이를 계산한 뒤 가장 짧은 길이를 반환하여 푼다.
s길이의 절반이 최대 압축가능한 단위이므로 s.length / 2만큼 반복문을 돌린다.
while 반복문으로 압축된 문자열을 str에 담고.
str의 길이를 answer에 push한다.
모든 경우에 대한 str의 길이가 answer에 담겨있으므로 answer의 최소값을 반환한다.