거의 알고리즘 일기장

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

알고리즘 문제풀이

프로그래머스 _ 문자열 압축

건우권 2020. 9. 11. 22:11

programmers.co.kr/learn/courses/30/lessons/60057#

 

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

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

programmers.co.kr

풀이방법

1. 문자를 나누는 숫자 1 ~ 주어진문자열의 길이/2 for문

2. 비교

3. 줄어드는 숫자 = (원래길이) - (나중에 나오는 길이)


코드

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

int solution(string s) {
    int answer = 0;

    //1. 단위
    for(int divNum =1; divNum <=s.length()/2; divNum++)
    {
        int compressionRate = 0;
        
        for (int i = 0; i < s.length();)
        {
            string str = s.substr(i, divNum);
            int cnt = 0;
            for (int j = i; j < s.length(); j += divNum)
            {
                string compareStr = s.substr(j, divNum);
                if (str == compareStr)
                    cnt++;
                else
                    break;
            }

            string repeatStr = to_string(cnt);
            int numberLen = repeatStr.length();

            if (cnt > 1)
                //압축률 = (원래길이) - (나중에 나오는 길이)
                compressionRate += (divNum * cnt) - (divNum + numberLen);
            //건너뛰기!!
            i += cnt * divNum;
        }
        answer = max(compressionRate, answer);
    }

    answer = s.size() - answer;

    return answer;
}

numberLen를 잘못구했는데 눈에 띄지 않아서 ㅋㅋㅋㅋㅋㅋ 시간 좀 많이 날렸다

반응형
Comments