본문 바로가기

algorithm/프로그래머스

프로그래머스_문자열 압축(C++)

 

https://programmers.co.kr/learn/courses/30/lessons/60057

 

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

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

programmers.co.kr

[문제 풀이]

1. 입력된 stinrg을 1의 크기부터 s.size()까지 compression을 돌립니다. 


2. 그 후 들어온 크기로 잘라서 비교할 문자열을 temp에 넣습니다 


3. 크기만큼 계속 비교하면서 같으면 overlap변수를 증가시켜주고 아니면 result 문자열에 추가하고 temp 문자열을

   업데 이트시켜줍니다. 


4. 비교하면서 끝인지 아닌지 계속 비교해줍니다

[코드]

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

using namespace std;

int answer = 987654321;

void compression(string s, int num) {

    int length = s.size();
    int overlap = 1;

    if (length <= num) {
        if (s.size() < answer)
            answer = s.size();
        return;
    }

    string temp = s.substr(0, num);
    string result;

    for (int i = num; i < length; i = i + num) {

        if (i + num > length) {

            if (overlap == 1) {
                result += temp;
                temp = s.substr(i);
                result += temp;
                break;
            }
            else {
                result += to_string(overlap);
                result += temp;
                temp = s.substr(i);
                result += temp;
                break;
            }
        }

        if (temp == s.substr(i, num)) {
            if (i + num == length) {
                result += to_string(overlap + 1);
                result += temp;
                break;
            }
            else
                overlap++;
        }
        else {
            if (overlap == 1) {
                if (i + num == length) {
                    result += temp;
                    temp = s.substr(i, num);
                    result += temp;
                }
                else {
                    result += temp;
                    temp = s.substr(i, num);
                }
            }
            else {
                if (i + num == length) {
                    result += to_string(overlap);
                    result += temp;
                    temp = s.substr(i, num);
                    result += temp;
                }
                else {
                    result += to_string(overlap);
                    result += temp;
                    overlap = 1;
                    temp = s.substr(i, num);
                }

            }
        }
    }

    if (result.size() < answer)
        answer = result.size();

}
int solution(string s) {

    for (int i = 1; i <= s.size(); i++)
        compression(s, i);

    return answer;
}