n개씩 잘라서 압축했을 때 가장짧은 case의 길이 구하기
s | result | |
---|---|---|
"aabbaccc" | 2a2ba3c | 7 |
"ababcdcdababcdcd" | 2ababcdcd | 9 |
"abcabcdede" | 2abcdede | 8 |
"abcabcabcabcdededededede" | 2abcabc2dedede | 14 |
"xababcdcdababcdcd" | 17 |
function solution(s) {
var answer = s.length; // 초기값은 가장 큰 값인 s의 길이
let temp = []; // [길이가 n인 문자열]
let count = 1; // n개씩 자르기
let same = 1 // 자기 자신은 무조건 존재 하므로 초기값은 1
let tempAnswer = "" // 문자열 축적하기
while(count<s.length){ // count 만큼 이동하면서 탐색하는데 1/2 넘어가면 의미 없음
for(let z = 0 ; z < s.length ; z+=count){ // count 만큼 이동하면서 탐색
temp.push(s.slice(z,z+count)) // count 만큼 잘라서 배열로
}
for(let i = 0 ; i < temp.length ; i ++){ // 앞뒤가 같은것을 count 해서 same에 저장, 다른면 same초기화 count개수랑 중복개수 더해서 answer에 저장.
if(temp[i] === temp[i+1]){
same++
// console.log("같을때",temp[i],temp[i+1], count, same)
} else {
// 다르면 카우트 만큼 저장하고 삭제
// console.log("debug", tempAnswer,same,temp[i] )
tempAnswer += (same === 1? "": same) + temp[i]
// console.log("다를때",temp[i],temp[i+1], tempAnswer)
same = 1
}
}
if (answer > tempAnswer.length){
answer = tempAnswer.length
}
tempAnswer = ""
temp = []
count++
}
return answer;
// 숫자가 2자리 일때
}