프로그래머스 LV2 #8 문자열 압축

jakeseo_me·2020년 8월 2일
0

프로그래머스 LV2

목록 보기
8/10

프로그래머스 LV2 #8 문자열 압축

문제

풀이

이 문제에 대한 저의 접근법은 문자열을 1개~(문자열 전체 숫자의 반)까지 쪼개면서 얼마나 많은 패턴이 연속으로 일치하는지 검증했습니다.

주석에 적혀있는대로 이전에 담아둔 문자열과 일치하는지를 확인하고 일치한다면 stack 숫자를 1씩 늘려가는 방식으로 작성했습니다.

그리고 최종에는 글자 숫자가 딱 나눠떨어지지 않는 부분을 더해줘서 오차를 없앴습니다.

매우 직관적인 풀이법으로 풀었습니다.

let solution = s => {
    let answer = 1;

    for(let j=1; j<=Math.floor(s.length/2); j++){
        let prev = "";
        let res = "";
        let stack = 1;

        for(let i=j; i<=s.length; i=i+j){
            let next = s.slice(i-j, i); // slice(a, b)는 b-1까지의 문자열

            // 첫 반복인 경우
            if(prev === ""){
                prev = next;
                continue;
            }

            // 이전 것과 일치하는 경우 (압축 가능)
            if(next === prev){
                stack += 1;
                continue;
            }

            // 이전 것과 일치하지 않는 경우 (압축 불가능)
            res += (stack === 1 ? "" : "" + stack) + prev;
            prev = next;
            stack = 1;
        }
        res += (stack === 1 ? "" : "" + stack) + prev;
        let resLength = res.length + (s.length % j);

        if(answer === 1 || answer > resLength){
            answer = resLength;
        }
    } 

    return answer;
};

추후에 다른 사람들의 풀이도 추가하여 포스팅을 수정하겠습니다.

profile
대전에 있는 (주) 아이와즈에서 풀스택 웹개발자로 일하고 있는 서진규입니다. 주로 Jake Seo라는 닉네임을 많이 씁니다. Javascript를 좋아합니다.

0개의 댓글