[프로그래머스] 문자열 압축 (javascript)

728x90
반응형

문자를 1개로 자르는 것부터 최대 문자열/2의 길이까지 압축할 수 있다

압축을 못하는 경우도 넣어줘야 모든 케이스를 통과한다 

 

자른 문자열의 앞과 뒤를 비교해서 다르면 지금까지 자른 문자열을 새로운 문자열에 더해준다

function solution(s) {
    var answer = [s.length]; // 압축이 안된 문자열도 넣어줘야 모든 테스트 통과함
    let max_len=Math.floor(s.length/2); //압축할 수 있는 경우 최대 문자열/2 의 길이까지
//     자르는 길이 
    for(let i=1;i<=max_len;i++){ //문자를 1개~문자열길이/2까지 해본다 
        let cnt=1;
        let sub_str="";
        for(let j=0;j<s.length;j+=i){
            const first=s.substring(j,j+i); //substring은 뒤의 인덱스가 길이를 넘어가면
            // 개수에 상관없이 남은 문자열을 리턴해준다
            const second=s.substring(j+i,j+i*2);
            if(first===second){
                cnt+=1;
            }else{
                if(cnt==1){
                    sub_str=sub_str+first; //숫자랑 문자열을 더하면 숫자가 문자로 변환 
                }else{
                    sub_str=sub_str+cnt+first;
                    cnt=1;
                }
            }
        }
        answer.push(sub_str.length);
    }
    return Math.min(...answer); //최소길이 구한다
}
728x90
반응형
TAGS.

Comments