프로그래머스

문자열 압축

crab. 2022. 6. 6. 23:40
반응형

📌문제 출처

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

 

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

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

programmers.co.kr

<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(s) {
                let answer = 0;
                //최소값을 안전한 제일큰값으로 우선설정
                let min = Number.MAX_SAFE_INTEGER;
                //i는 압축 단위
                //절반을 넘겨서 압축은 의미 없고
                //+1은 입력받은 문자가 1개일 경우 대비 
                for(let i=1;i<=Math.floor(s.length/2)+1;i++){
                    //압축문자들을 받을 변수 res
                    let res = '';
                    //압축횟수 cnt
                    let cnt = 1;
                    //j가 1일때는 1개씩증가
                    //2일때는 2개씩 증가하도록 
                    //for문의 증감문부분에 j+=i를 써줌
                    for(let j=0;j<s.length;j+=i){
                        //i가 압축단위이므로 
                        //substr로 압축단위씩 잘라 비교 
                        //같다면 res에 넣지는 않고 압축횟수만++
                        if(s.substr(j,i) === s.substr(j+i,i)){
                            cnt++;
                        }
                        //다르고 cnt의 증감이 있었다면
                        //res에 먼저 압축횟수써주고
                        //그다음 압축문자열을 써줌
                        else if(cnt != 1){
                            res+=cnt;
                            res+=s.substr(j,i)
                            cnt = 1;
                        }
                        //다르고 cnt증감없었다면
                        //그냥 바로 써줌
                        else{
                            res+=s.substr(j,i)
                        }
                    }
                    //압축이 끝나고 지금까지의 길이를 작다면 
                    //min에 업데이트
                    if(res.length < min)  min = res.length;
                }
                //answer는 min임
                answer = min;
                return answer;
            }
            let s = "abcabcabcabcdededededede"
            console.log(solution(s));
        </script>
    </body>
</html>
반응형

'프로그래머스' 카테고리의 다른 글

음양더하기  (0) 2022.07.16
두 정수 사이의 합  (0) 2022.07.16
두 개 뽑아서 더하기  (0) 2022.01.31
최소직사각형  (0) 2022.01.31
수박수박수박수박수박수?  (0) 2022.01.31