function solution(s) {
let answer = 0;
for(let i=1; i<= s.length/2+1 ; i++){
let cur = ''; // 누적 문자열
let time = 1; // 반복 회수
let before = s.substr(0, i); //이전 문자열
let temp; //현재 문자열
for(let j=i; j<s.length+i ; j+=i){
temp = s.substr(j, i);
if(before===temp){
time++;
}else{
cur += time>1? time+before : before;
before = temp;
time = 1;
}
}
if(answer===0 || answer > cur.length){
answer = cur.length;
}
cur = '';
}
return answer;
}
1부터 문자열의 길이 절반에 1을 더한 값을 첫 번째 for문의 범위로 잡았다. for문의 범위가 length/2인 이유는 압축할 수 있는 최대길이가 문자열 길이의 절반이기 때문이다. 이후 +1을 한 이유는 입력 문자열이 한자리일 경우 첫 번째 반복문 자체가 실행되지 않기 때문이다. 두 번째 for 문에서는 현재 범위의 문자열(temp)을 자르고 이전 범위의 문자열(before)과 비교한다. 비교 결과, 같으면 반복회수를 +1 하고 다르면 누적 문자열에 이전 문자열을 더한다. 이때 반복회수를 확인해서 2이상이면 반복회수도 더해준다. 두 번째 for문에서 범위에 i를 더해준 이유는 마지막 남은 문자열을 처리하기 위함이다.