[프로그래머스] Lv2. 문자열 압축- JavaScript

이상돈·2023년 6월 29일
0
post-thumbnail

문제분류 : 코팅테스트 연습

난이도 : Level 2

출처 : 프로그래머스 - 문자열 압축

문제

제한사항

📌 내가 생각한 풀이

문자열자르는 단위를 1부터 (s의 길이/2)까지 탐색하자. 그 이후에 문자열을 담는 컨테이너를 만들고, 컨테이너의 마지막 인덱스의 값이 같으면 횟수 +1 다르면 push하여 문자열을 만들고 총 길이를 length배열에 넣은다음 최소값을 찾자.
function solution(s) {
    let length = [s.length];
    let limit = Math.floor(s.length/2);
    for(var i =1; i<=limit; i++){
        let unit = i;
        let idx =0;
        let splitArr = []
        let k = s.substr(idx, unit);
        splitArr.push([k,1]);
        idx = unit
        while(idx < s.length){
            let a = s.substr(idx, unit);
            idx+=unit
            if(splitArr.at(-1)[0] !== a){
                splitArr.push([a,1]);    
            }else{
                let popped = splitArr.pop();
                popped[1]++;
                splitArr.push(popped);
            }
        }
        let len = 0;
        while(splitArr.length){
            let pop = splitArr.pop();
            if(pop[1] > 1){
                let numCount = pop[1].toString().length;
                len +=pop[0].length+numCount
            }else{
                len += pop[0].length
            }
        }
        length.push(len);
    }
    return Math.min(...length)
}

📌 느낀점

중복값이 두자리가 넘어가는 경우를 생각하지 못하였다. 중복된 횟수만큼 더해주고, 길이를 구해주면 히든케이스도 모두 통과되었다.

profile
사람들의 더 나은 삶을 위한 개발자

0개의 댓글