[21/09/01 복습] 문자열 압축
문자열 압축
반례 : 문자열길이가 1일때 답은 1임 -> 기존의 코드는 첫번째 포문에 안들어가게됨
function solution(s){
// 반으로 나누게 되면 문자열 길이가 1일때 0이되어서 첫번째 포문이 들어가지 않게되고 result가 그대로 답으로 출력되어버림
// const finish = Math.floor(s.length / 2);
let result = 10000000000;
for(let i=1;i <= s.length;i++){
let string = ''
let cache = s.slice(0,i);
let count = 1;
let j = i;
let c;
while( c !== ""){
c = s.slice(j,j+i)
if(cache === c){
count++;
}else{
string += `${count === 1 ? '' : count}${cache}`;
count = 1;
}
cache = c;
j = j + i;
}
result = Math.min(result,string.length);
}
return result;
}
function solution(s){
let result = 10000000000;
for(let i=0;i <= Math.floor(s.length / 2);i++){
// 쪼개는 갯수
const splitNumbers = i + 1;
// splitNumbers개로 쪼갤 때 압축되는 문자열 변수
let compressionString = ''
// 이전의 쪼개진 문자열
let cache = s.slice(0,splitNumbers);
// 이전거랑 같은 경우
let cacheHit = 1;
// splitNumbers 개로 잘려진 문자열
let splitString;
// 순회하는 변수
let j = splitNumbers;
// 잘려지는 문자열이 없을 때 까지 한다.
while( splitString !== ""){
splitString = s.slice(j,j+splitNumbers)
if(cache === splitString){
cacheHit++;
}else{
compressionString += `${cacheHit === 1 ? '' : cacheHit}${cache}`;
cacheHit = 1;
}
cache = splitString;
j = j + splitNumbers;
}
result = Math.min(result,compressionString.length);
}
return result;
}
밑은 함수로 분리한 것이다.
function compression(s,splitNumbers){
let splitString;
let compressionString = ''
let cache = s.slice(0,splitNumbers);
let cacheHit = 1;
let i = splitNumbers;
while( splitString !== ""){
splitString = s.slice(i,i+splitNumbers)
if(cache === splitString){
cacheHit++;
}else{
compressionString += `${cacheHit === 1 ? '' : cacheHit}${cache}`;
cacheHit = 1;
}
cache = splitString;
i = i + splitNumbers;
}
return compressionString
}
function solution(s){
let result = 10000000000;
for(let i=0;i <= Math.floor(s.length / 2);i++){
result = Math.min(result,compression(s,i+1).length);
}
return result;
}
느낀점
반례찾을때는 애매한 경우, 극단적인 경우를 우선적으로 조사하자.
Author And Source
이 문제에 관하여([21/09/01 복습] 문자열 압축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rat8397/210901-복습-문자열-압축저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)