티스토리 뷰

728x90

문제 링크

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

 

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

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

programmers.co.kr

 

풀이

간단합니다. 가능한 모든 단위(1 ~ s의 길이)로 문자열을 잘라 압축해보고, 그 결과 중 가장 작은 값을 고르면 됩니다.

코드에선 구현상 편의를 위해 마지막에 더미 스트링을 하나 끼워넣었습니다.

 

정답 코드

const compressData = tokens => {
    let s = '';
    let prev = '';
    let cnt = 0;
    tokens.forEach(token => {
        if(token !== prev){
            if(cnt > 1) s += String(cnt);
            s += prev;
            cnt = 0;
        }
        cnt++;  
        prev = token;
    });
    return s.length;
}
function solution(s) {
    const INF = 0x3f3f3f3f;
    let ans = INF;
    for(let i=1; i < s.length + 1; i++){
        const tokens = [];
        for(let j=0; j < s.length; j+=i){
            tokens.push(s.substr(j, i));
        }
        tokens.push('-=-');
        ans = Math.min(ans, compressData(tokens));
    }

    return ans;
}

 

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함