forked from ndb796/python-for-coding-test
-
Notifications
You must be signed in to change notification settings - Fork 0
/
3.cpp
29 lines (27 loc) · 1.18 KB
/
3.cpp
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
#include <bits/stdc++.h>
using namespace std;
int solution(string s) {
int answer = s.size();
// 1개 단위(step)부터 압축 단위를 늘려가며 확인
for (int step = 1; step < s.size() / 2 + 1; step++) {
string compressed = "";
string prev = s.substr(0, step); // 앞에서부터 step만큼의 문자열 추출
int cnt = 1;
// 단위(step) 크기만큼 증가시키며 이전 문자열과 비교
for (int j = step; j < s.size(); j += step) {
// 이전 상태와 동일하다면 압축 횟수(count) 증가
if (prev == s.substr(j, step)) cnt += 1;
// 다른 문자열이 나왔다면(더 이상 압축하지 못하는 경우라면)
else {
compressed += (cnt >= 2)? to_string(cnt) + prev : prev;
prev = s.substr(j, step); // 다시 상태 초기화
cnt = 1;
}
}
// 남아있는 문자열에 대해서 처리
compressed += (cnt >= 2)? to_string(cnt) + prev : prev;
// 만들어지는 압축 문자열이 가장 짧은 것이 정답
answer = min(answer, (int)compressed.size());
}
return answer;
}