슈뢰딩거의 고등어

[프로그래머스] 문자열 압축 본문

알고리즘

[프로그래머스] 문자열 압축

슈뢰딩거의 고등어 2022. 2. 8. 10:49

https://programmers.co.kr/learn/courses/30/lessons/60057?language=cpp

 

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

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

programmers.co.kr

  1. 자르는 단위가 문자열길이의 /2 이상일 경우, 압축이 되지않으므로 1부터 s/2 까지 확인해보면 된다.
  2. 자르는 단위
    1. 문자열 처음부터 끝까지 확인 ( 자르는 문자열 (키) 가 다음에 존재할 경우, cnt++ 해주고
    2. 존재하지 않을 경우, 압축된 결과를 result 에 append 해준다.
      1. cnt == 1 일경우, cnt 는 append 안해줘도 됨
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int solution(string s) {
    int answer = s.size();
    int len = answer;
    int n = len/2;
    string result = "";

    for(int i=1; i<=n; i++) {
        result = "";
        string ss = s.substr(0, i);
        int cnt = 1;

        for(int j=i; j<=len; j+=i) {
            if (ss == s.substr(j,i)){
                cnt+=1;
            }
            else {
                if (cnt == 1) {
                    result += ss;
                }
                else {
                    result += (to_string(cnt)+ss);
                }
								
								/* 일치하지 않을 경우, 키를 탐색위치의 것으로 바꿔준다 */
                ss = s.substr(j, i);
                cnt = 1;
            }
        }
        if ((len % i) != 0)
            result += s.substr((len/i)*i);

        if (answer > result.size()) {
            answer = result.size();
        }
    }
    cout << result;
    return answer;
}
Comments