Programmers - 문자열 압축 (Javascript)

Hyeon·2021년 9월 11일
0
function solution(s) {
    let answer = 0;

    for(let i=1; i<= s.length/2+1 ; i++){
        let cur = ''; // 누적 문자열
        let time = 1; // 반복 회수
        let before = s.substr(0, i); //이전 문자열
        let temp; //현재 문자열
        
        for(let j=i; j<s.length+i ; j+=i){   
            temp = s.substr(j, i);
            if(before===temp){
                time++;
            }else{
                cur += time>1? time+before : before;
                before = temp;
                time = 1;
            }
        }
        
        if(answer===0 || answer > cur.length){
            answer = cur.length;
        }
        cur = '';
    }
    return answer;
}

1부터 문자열의 길이 절반에 1을 더한 값을 첫 번째 for문의 범위로 잡았다. for문의 범위가 length/2인 이유는 압축할 수 있는 최대길이가 문자열 길이의 절반이기 때문이다. 이후 +1을 한 이유는 입력 문자열이 한자리일 경우 첫 번째 반복문 자체가 실행되지 않기 때문이다. 두 번째 for 문에서는 현재 범위의 문자열(temp)을 자르고 이전 범위의 문자열(before)과 비교한다. 비교 결과, 같으면 반복회수를 +1 하고 다르면 누적 문자열에 이전 문자열을 더한다. 이때 반복회수를 확인해서 2이상이면 반복회수도 더해준다. 두 번째 for문에서 범위에 i를 더해준 이유는 마지막 남은 문자열을 처리하기 위함이다.

profile
요즘 인터렉티브한 웹에 관심이 많습니다.

0개의 댓글