본문 바로가기

알고리즘 문제풀이

[프로그래머스] 2020 카카오 공채 - 문자열 압축

오늘 푼 문제

 

1. 문자열 압축 / Lv.2 / 시간 : 31분

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

 

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

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

programmers.co.kr

function solution(s) {
    if(s.length===1) return 1;
    var answer = Infinity;
    let max = s.length/2;
    for(let n=1;n<=max;n++){
        let arr = s.match(new RegExp(`.{1,${n}}`,'g'));
        let cnt=1;
        let len = arr.reduce((acc,cur,i)=>{
            let next = arr[i+1];
            if(cur===next) cnt++;
            else{
                if(cnt===1) acc+=cur;
                else acc+=(cnt+cur);
                cnt =1;
            }
            return acc;
        },"").length;
        if(len<answer) answer = len;
    }
    return answer;
}

 

완전 탐색으로 모든 경우의 수 (1부터 문자열의 길이/2 까지) 다 탐색해도 시간 괜찮음.

문자열 s를 n개로 나누는 정규식

s.match(/.{1,n}/g)

이 때 n을 변수로 사용하려면 new RegExp(`.{1,${n}}`,"g") 의 형태로 동적으로 생성해줘야 한다.