문자열 압축

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

 

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

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

programmers.co.kr

- 문제 내용 : Run Length Encoding을 하는데 있어서 가장 적절한 길이를 찾아라

- 접근 방법 : 모든 경우의 수를 loop로 돌아서 처리한다

나의 멍청함이 한껏 빛을 발휘하는 문제였다.

문제는 쉽지만 문제의 제한 사항을 정확히 찾아내지 못해서...

  • 1번 나타난 값은 1을 표시하지 않는다
  • 2번부터 9번 나타난 값까지니는 한자리수 더한다.
    예) abcabc = 7abc
  • 10번부터 99번 까지는 두자리수 더한다. 10abc
  • 1000번 나타나는 a는 1000a 이다.

부주의 함이 항상 문제인데 어떻게 해결해야 될까..

function solution(s) {
    if(s.length < 3) return s.length;
    let max = s.length;

    for (let i = 1; i <= Math.floor(s.length/2); i++) {
        max = Math.min(max, getLength(i, s));
    }
    return max;

}

function getLength(len, s){
    let last = "";
    let count = 1;
    let total = 0;
    for (let i = 0; i <= s.length; i += len) {
        let str = s.substring(i, i + len);
        if (str === last) {
            count++;
        } else {
            last = str;
            total += str.length;
            if(1 < count){
                total+=count.toString().length;
                count = 1;
            }
        }
    }

    return total;
}
728x90
반응형

'Problem Solving' 카테고리의 다른 글

Permutation  (0) 2020.09.18
괄호 변환  (0) 2020.09.15
Union find  (0) 2020.09.15
지형 이동  (0) 2020.09.14
Javascript Priority Queue 오름 차순  (0) 2020.09.14