문제
코드
function solution(s) {
let ans = s.length, leng = ans;
for(let i=1; i<=s.length/2; i++) {
let target = '', count = 0;
for(let j=0; j<i*Math.floor(s.length/i); j+=i) {
const cur = s.slice(j, j+i);
if(count === 0) {
target = cur
count++;
}
else {
if(target === cur) count++;
else {
if(count !== 1) {
if(count < 10) leng -= i*count-(i+1);
else if(count < 100) leng -= i*count-(i+2);
else if(count < 1000) leng -= i*count-(i+3);
else leng -= i*count-(i+4);
}
count = 1;
target = cur;
}
if(j+i === s.length - (s.length%i) && count !== 1) {
if(count < 10) leng -= i*count-(i+1);
else if(count < 100) leng -= i*count-(i+2);
else if(count < 1000) leng -= i*count-(i+3);
else leng -= i*count-(i+4);
}
}
}
if(ans > leng) ans = leng;
leng = s.length;
}
return ans;
}
function solution(s) {
if(s.length === 1 ) return 1;
let min = 1000;
for (let i = 1; i <= s.length / 2; i++) {
let str1 = '';
let str2 = '';
let ans = '';
let count = 1;
for (let j = 0; j < s.length; j += i) {
if( j === 0 ) {
str1 = s.slice(j, j + i);
}else{
str2 = s.slice(j, j + i)
if(str1 === str2){
count++;
if(j+i === s.length) ans += `${count}${str1}`;
}else{
if( count > 1 ){
ans += `${count}${str1}`
}else{
ans += str1;
}
count = 1;
if(str1.length > str2.length){
ans += str2;
}
str1 = str2;
if(j+i === s.length) ans += str2;
}
}
}
min = Math.min(ans.length, min);
}
return min;
}
같은 문자의 반복 자릿수가 달라진다.
- s의 절반길이까지만 체크
- 난 자릿수 체크를 하지 않고 항상 1의 자리로 계산했다.
- 실패하는 테스크 케이스가 10의 자리 100의 자리까지 반복된다는 것을 알고, if 문을 넣어줬다.
- 넣으면서도 이거 좀 아닌 것 같은데 싶었다.
count와 str을 이용한 풀이
- count를 계산 후 현재 문자열인 str 앞에 count를 바로 붙여줬다.
- 문자열로 된 숫자 + 문자열 조합으로 if문 없이 간단히 풀었다.