IT/Algorithm

프로그래머스) 문자열 압축

프티 2021. 10. 28. 13:04
반응형

https://programmers.co.kr/learn/courses/30/lessons/60057

 

코딩테스트 연습 - 문자열 압축

데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문

programmers.co.kr

나의 풀이

function solution(s) {
    if (s.length === 1) {
        return 1;
    }
    
    const answer = [];
    
    let string = s.split("");
    let zipList = [];
    let count = 1;
    
    for (let i = 1; i <= (s.length / 2); i++) {
        let zip = "";
        
        while(string.length) {
            zipList.push(string.splice(0, i).join(""));
        }
        
        zipList.reduce((acc, cur, indx) => {
            if (JSON.stringify(acc) === JSON.stringify(cur)) {
                count += 1;
                
                if (indx === zipList.length - 1) {
                    count === 1 ? zip += acc : zip += count + acc;
                    count = 1;
                }
                
                return cur;
            }
            count === 1 ? zip += acc : zip += count + acc;
            count = 1;
            
            if (indx === zipList.length - 1) {
                zip += cur;
            }
            
            return cur;
        });

        answer.push(zip);
        string = s.split("");
        zipList = [];
    }

    return Math.min(...answer.map(zip => {
        return zip.split("")
                  .join("")
                  .length;
    }));
}

엄청 길다..!

json.stringify로 비교하였고, count를 세어서 반복 횟수와 함께 zip에 넣었다.

zip을 answer에 모아놓고 마지막에 나머지 연산자와 math.min으로 최솟값을 구하여 반환하였다.

 

아직 재귀함수를 활용하지 못하는 것이 아쉽다 ㅠ

반응형