본문 바로가기
Algorithm/Programmers

[Programmers] 문자열 압축

by J4J 2021. 3. 17.
300x250
반응형

문제

 

2020 KAKAO BLIND RECRUITMENT > 문자열 압축

 

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

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

programmers.co.kr

 

 

아이디어

 

이 문제는 문제를 푼 사람이 많은 것처럼 큰 아이디어를 요구하지 않았습니다.

 

문자열을 모두 동일한 길이로 잘라낸 뒤 잘라진 문자열 중 동일한 문자열이 있다면 개수를 세어 그에 걸맞은 새로운 문자열을 만들어주기만 하면 됩니다.

 

다음과 같은 절차를 통해 코드를 작성하면 됩니다.

 

1. 자를 문자열 길이 탐색 (1~s문자열의 길이/2)

2. 길이만큼 잘라낸 문자열을 모두 탐색하여 동일한 문자열이 있는지 체크

3. 새롭게 만들어진 문자열의 길이들을 비교

4. 모든 문자열 길이를 탐색할 때까지 1~3을 반복

 

 

구현 코드 (JavaScript)

 

function solution(s) {
    let res = s.length;
    
    for(let l=1; l<=Math.floor(s.length/2); l++) {
        let sentence = ''; // 새롭게 만들어질 문자열
        let str = s.substring(0, l); // 길이만큼 잘린 첫 번째 문자열
        let count = 1; // 잘린 문자열 중 같은 문자열의 개수

        for(let i=l; i<s.length; i=i+l) {
            let tempstr = s.substring(i, i+l); // 비교할 잘린 문자열

            if(str === tempstr) { // 문자열이 같을 경우
                count++;
            } else {
                if(count === 1) { // 같은 문자열의 개수가 1개일 경우
                    sentence = sentence + str;
                } else { // 같은 문자열의 개수가 1개보다 클 경우
                    sentence = sentence + count + str;
                }
                // 비교할 문자열과 개수 초기화
                str = tempstr;
                count = 1;
            }
        }

        // 문자열을 모두 탐색한 뒤 저장되어 있는 값도 저장
        if(count === 1) {
            sentence = sentence + str;
        } else {
            sentence = sentence + count + str;
        }

        res = Math.min(res, sentence.length);
    }
    
    return res;
}

 

 

 

읽어주셔서 감사합니다.

728x90
반응형

'Algorithm > Programmers' 카테고리의 다른 글

[Programmers] 자물쇠와 열쇠  (0) 2021.03.19
[Programmers] 괄호 변환  (0) 2021.03.18
[Programmers] 보행자 천국  (0) 2021.03.14
[Programmers] 단체사진 찍기  (0) 2021.03.13
[Programmers] 외벽 점검  (0) 2021.03.12

댓글