본문 바로가기
Algorithm/문제풀이

[프로그래머스] 문자열 압축(LV.2) by javascript - 2020 KAKAO BLIND RECRUITMENT

by 썸머워즈 2022. 3. 10.
반응형

▷ 문제 : 2020 KAKAO BLIND RECRUITMENT - 문자열 압축 LV.2

 

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

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

programmers.co.kr


해결 날짜 : 2022.03.10
소요 시간 : 3시간
▷ 풀이 과정 :
문제 자체는 크게 어렵지 않았는데,
"ababcdcdababcdcd" 이런식의 문자열이 입력됐을 경우 1~N개 단위로 압축하여 가장 짧은 것의 길이를 반환하는게 이 문제의 전부이다.

이번에는 다른 문제와 달리 구현단계에서 좀 지체됐다.
단순하게 생각하여 기준 문자열 (원본 문자열에서 단위별로 자른 문자열)을 가지고 비교를 해주면 끝이다.

그 과정을 구현하면 되는건데,
잘라서 조각난 문자열을 넣어줄 배열 하나와 개수를 세는 변수 각각 하나씩을 준비한 다음
계속해서 기준 문자열을 가지고 이전에 담긴 문자열과 같은지만 체크해주면 구현이 완성된다.

구현

function solution(s) {
    let answers = [];
    for(let i = 1; i <= s.length; i++){
        answers.push(getAnswer(s, i));
    }
    return Math.min(...answers.map(e => e.join('').length));
}

function getAnswer(str, unit){
    let count = 1;
    let answer = [];
    for(let i = 0 ; i <= str.length/unit ; i++){
        let unitStr = str.slice(unit * i, unit * i + unit);
        if(answer[answer.length - 1] == unitStr){
            count++;
        }else{
            if(count > 1) answer[answer.length - 1] = count + answer[answer.length - 1];
            answer.push(unitStr);
            count = 1;
        }
    }
    return answer;
}


복기 :
문제는 생각보다 쉬웠다.
근데 시간이 너무 많이 소요되었는데, 요즘들어 알고리즘 이것저것 익히다보니 너무 어렵게 생각하는 습관이 생겨버렸다.

그래서 결국 멍때리다 단순하게 가보자 하고 푼 결과 3시간이라는 시간이 소요된게 너무 아쉽다.
그렇지만 지금 내 이런 상황에서 이 문제를 접한건 좋았다고 생각된다.

반응형


댓글

TOP