#include <string>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
int solution(string s) {
int answer = s.size();
if(answer == 1)
return 1;
for(int i = 1; i <= s.size() / 2; i++) //길이
{
string temp = "";
string currtemp = s.substr(0, i);
int counts = 1;
for(int j = i; j < s.size(); j += i) //반복
{
string nexttemp = s.substr(j, i);
if(currtemp == nexttemp)
{
counts++;
}
else
{
if(counts == 1) //다음 것과 같지 않고 처음 비교 했을 때
{
temp += currtemp;
currtemp = nexttemp;
}
else //비교한 적이 있을 때
{
temp += to_string(counts) + currtemp;
currtemp = nexttemp;
counts = 1;
}
}
if(j + i >= s.size()) //다음 단어가 단어 길이를 넘을때
{
if(counts == 1)
{
temp += s.substr(j);
break;
}
else
{
temp += to_string(counts) + currtemp;
break;
}
}
}
if(answer > temp.size())
answer = temp.size();
}
return answer;
}
풀이
- 문자열의 길이가 2이하일 경우 최소 압축가능한 수가 2이므로 return s.size()
- 압축 가능한 길이 1~s.size()만큼을 비교해준다.
- 시작 문자의 다음 문자부터 비교을 시작해준다.
- 같으면 count를 증가한다.
- 같지 않으면 count가 1일때 현재것만 압축가능한 것이므로 문자열에 현재 값을 추가하고
count가 2이상이라면 문자개수와 문자를 문자열에 추가해준다. - 만약 다음 비교할 대상이 s의 길이를 넘을 경우 count가 1이면 남은 글자들을 넣어주고
count가 2이상이라면 문자개수와 문자를 문자열에 추가해준다. - answer와 현재 만들어진 문자열의 길이를 비교하여 더 작은 쪽을 추가해준다.
'Algorithm > Programmers' 카테고리의 다른 글
[C++] 프로그래머스 가장 큰 정사각형 찾기 DP (0) | 2021.04.29 |
---|---|
[C++] 프로그래머스 쿼드압축 후 개수 세기 (0) | 2021.04.29 |
[C++] 프로그래머스 카카오 1차 온라인 코딩테스트 5번 문제 뉴스 클러스터링(난이도: 중) (0) | 2021.04.27 |
[C++] 프로그래머스 베스트앨범 해시 (0) | 2021.04.26 |
[C++] 프로그래머스 위장 해시 (0) | 2021.04.26 |