본문 바로가기

Programmers/프로그래머스

[Programmers] 문자열 압축

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <string>
#include <vector>
#include <iostream>
 
using namespace std;
//제일 앞에서부터 일정한 길이로 잘라서 가장 짧게 압축되는 경우를 찾는다.
int min(const int &a, const int &b) {
    if (a >= b) return b;
    return a;
}
int solution(string s) {
    int answer = s.size();
 
    for (int i = 1; i <s.size(); i++) {
       int cnt = 1;
        //기본 1
        //최종 압축 된 후 문자열의 길이 (1 /2 등 압축된 개수까지 )
        int len =i;
        string prev = s.substr(0, i);
        //길이만큼 비교한다.
        for (int j= i; j < s.size(); j+=i) {
            string cur = s.substr(j, min(i, s.size()));
            if (cur == prev) cnt++;
            else {
                if (cnt > 1) {
                    //이전에 같은 문자열이 포함되어있다면
                    //cnt가 1자리수이면 1, 2자리수이면 2
                    len += to_string(cnt).size(); //자리수를 더해준다.
                }
                len += cur.length();
                cnt = 1;
                prev = cur;
            }
        }
        //len은 최종 압축 문자열의 길이
        if (cnt > 1) len += to_string(cnt).size();
        answer = min(answer, len);
    }
    return answer;
}

'Programmers > 프로그래머스' 카테고리의 다른 글

[Programmers] 땅따먹기  (0) 2020.04.04
[Programmers] 가장 긴 팰린드롬  (0) 2020.04.03
[Programmers] N-Queen  (0) 2020.04.03
[Programmers] 방문 길이  (0) 2020.04.03
[Programmers] 종이접기  (0) 2020.04.03