✍ 나의 풀이
function solution(s) {
const answer = [];
if(s.length === 1) return 1;
for(let i = 1; i <= s.length/2; i++){
let prev = s.substr(0,i);
let count = 1;
let str = '';
for(let j = i; j < s.length; j += i){
let cur = s.substr(j,i);
if(prev === cur) count++;
else {
str += (count > 1 ? count : '') + prev;
count = 1;
prev = cur;
};
};
str += (count > 1 ? count : '') + prev;
answer.push(str.length);
str = '';
};
return Math.min(...answer);
};
✍ 풀이과정
- 일단 매개변수 s의 길이가 1이라면 for문이 작동하지 않는다. 그래서 for문을 시작하기 전 길이가 1인 문자열에 대해서는 바로 return했다.
- prev(이전값)라는 변수를 설정해 cur(현재값)변수와 비교해나가는 코드를 구성했다.
prev === cur
이라면 카운트만 해주고, 지속되는 중복을 잡아내기위해 prev를 재할당하지 않았다.
prev !== cur
이면 앞뒤 문자가 다르다는 것이고, 지속되는 중복이 끝났다는 의미이기도 해서 prev 앞에 count를 붙여 str변수에 할당해주었다.
- 제일 마지막 cur은 for문 내에서 처리될 수 없기에, for문이 끝난 바로 다시
str += (count > 1 ? count : '') + prev
작성해 마지막 cur을 str에 반영했다.