새소식

Programmers

[Programmers] 문자열 압축 문제 - (javascript)

  • -
728x90
문제 이름 :  문자열 압축

 

<<< 문제 내용 >>>

 

 


 

function solution(s) {
    let answer = [s.length];
    
    let half = Math.floor(s.length/2);
    let sl = s.length;
    
    for(let i=1;i<=half;i++){
        let cnt = 1;
        let str = "";
        
        for(let j=0;j<sl;j+=i){
            let first_str = s.substring(j,j+i);
            let sec_str = s.substring(j+i,j+i*2);
            
            if(first_str === sec_str) cnt++;
            else{
                if(cnt === 1) str = str + first_str;
                else{
                    str = cnt + str + first_str;
                    cnt = 1;
                }
            }
        }
        answer.push(str.length);
    }
    
    answer = Math.min(...answer);
    
    return answer;
}

* 테스트 케이스 중 문자열이 단 1개인 경우가 있다. 이 경우 for문에 들어가지 못해서 s의 최고 길이를 미리 answer에 넣어두면 된다.

 

* 기본적인 흐름은 1차 for문은 입출력 예 "aabbaccc"를 기준으로 1칸[a] 2칸[aa] 3칸[aab] 이렇게 늘려가면서 탐색하도록 하고, 2차 for문은 1칸일 때 [a] [a] [b] [b] 2칸일 때 [aa] [bb] [ac] [cc] 이런 식으로 탐색하도록 하였다.

그 이후는 문자열을 substring을 통해 잘라가면서 만약 앞의 문자와 다르다면 이전까지 담아둔 str의 내용을 기존 str와 합쳐준다(개수를 포함해서).

 

느낀 점 : 문자열 관련해서 앞의 칸과 비교하는 식의 문제는 이렇게 접근하면 좋을 것 같다는 생각이 들었다.

 

 

도움이 되셨다면 공감 부탁드립니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.