ALGORITHM/Programmers + α

[프로그래머스] lv2. 문자열 압축 - JS

Harimad 2022. 6. 4. 22:24

문제

코딩테스트 연습 - 문자열 압축 | 프로그래머스 (programmers.co.kr)

 

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

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

programmers.co.kr

 

코드

function solution(s) {
    let answer = s.length;
    const maxLen = parseInt(s.length/2);// 문자열 압축은 1 ~ 문자열s의 길이/2까지 할 수 있다. +완전탐색 사용
    
    for (let i = 1; i <= maxLen; i++) {
        let str = '';			// 압축한 문자열 변수 저장
        let cnt = 1;			// 압축한 횟수
        let tmpStr = s.substr(0, i);	// 압축하는 기준 문자열

        for (let idx = i; idx <= s.length; idx += i) {	// idx: s 문자열을 압축하기 위한 문자열의 위치를 나타내는 변수
            let nextStr = s.substr(idx, i);

            if (tmpStr === nextStr) {		//현재 문자열과 다음 문자열이 같으면 압축이 가능하므로 count 1증가
                cnt += 1;
            } else {				// 문자열이 서로 다르면 압축 불가하므로 기준 문자열에 현재 문자열 붙임
                if (cnt === 1) str += tmpStr;
                else str += cnt + tmpStr;	//count가 1이 아니면 count(압축횟수)+현재 문자열 붙임

                cnt = 1;			//count를 다시 1로 초기화
                tmpStr = nextStr;		//현재 문자열을 다음 문자열로 최신화
            }
        }
        if (cnt === 1) str += tmpStr;		// 두 번째 for문이 끝났을 때, 뒤에 문자열이 저장이 안될때 str에 현재 문자열을 넣어줌
        else str += cnt + tmpStr;
        answer = Math.min(answer, str.length); 	// 압축한 문자열의 길이와 answer를 비교하여 최저값을 최신화
    }
    
    return answer;
}

solution("aabbaccc") // 길이: 7 | 단위:1, 2a2ba3c
// solution("ababcdcdababcdcd") // 9
// solution("abcabcabcabcdededededede"	) // 14
// solution("xababcdcdababcdcd") //  17

 

느낀점

lv2라 그런지 나에겐 아직 어렵다고 생각한다.

문제를 보고 풀이를 하려는데, 풀이구조를 잡기가 힘들어서 제대로 풀지 못했다.

그래서 오래 고민하다가 다른 사람의 코드(아래 참조)를 보게되었다.

다른 사람의 코드를 디버깅으로 한줄 한줄 실행시켜보며, 왜 이 코드가 존재하는지에 대해서 이해하게 되었다.

다시 꼭 복습ⁿ 해야겠다.

그리고 로직을 어떻게 구상해야할지 연습이 필요한 것 같다.

 

 

참고

[프로그래머] - lv2 문자열 압축 JavaScript (tistory.com)

 

[프로그래머] - lv2 문자열 압축 JavaScript

프로그래머스 lv2 문자열 압축 레벨: 2 언어: JavaScript 문제 풀러 가기 문제 설명 간단한 예로 "aabbaccc"의 경우 "2a2ba3c"(문자가 반복되지 않아 한번만 나타난 경우 1은 생략함)와 같이 표현할 수 있는

wonyoung2257.tistory.com