Study Record

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

알고리즘

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

초코초코초코 2021. 11. 30. 16:11
728x90
#include <string>
#include <vector>

using namespace std;

int getNum(int a){
    int num = 0;
    while (a > 0) {
        a = a * 0.1;
        num++;
    }
    return num;
}
string getString(string str, int start, int count) {
    string s = "";
    for (int i = 0; i < count; i++) {
        s += str[start+i];
    }
    return s;
}
int solution(string s) {
    int answer = s.size();
    int len = s.size();
    for (int i = 1; i <= (int)(len / 2); i++) {
        int tmp_answer = 0, j = 0;
        while (1) {
            string str = getString(s, j, i);
            int num = 0, index = j + i;
            // 겹쳐지는 문자열 찾기, num : 겹쳐지는 문자열 개수
            for (; index + i <= len; index = index + i) {
                string tmp = getString(s, index, i);
                if (tmp != str) break;
                num++;
            }
            if (num > 0) {
                // 겹치는 것이 존재한다면
                int a = getNum(num + 1);
                tmp_answer += a + i;
                j += (num + 1) * i;
            }
            else {
                tmp_answer += i;
                j += i;
            }

            if (j + i >= len) {
                tmp_answer += len - j;
                break;
            }
        }
        if (tmp_answer < answer) answer = tmp_answer;
    }
    return answer;
}
728x90