반복문 안에서 앞과 다음 값을 비교하려는 식으로 진행하려고 했지만, 이렇게 하면
만약에 뒤에거가 같으면 다다음값과 현재 타겟값을 비교해야 하는데 while문을 돌릴수 밖에 없는 상황이다.
다른 방법으로 접근해보자!
맨 처음에 초기값을 정한상태에서 진행하는 것이 적합하다.
만약에 aaabbccc이고 cut이 1이라고 한다면
word는 3a2b에서 끝난다. 왜냐하면 for문에서 size() 까지만 돌기 때문이다.
이에 대한 처리를 해야한다.
#include <string>
#include <vector>
using namespace std;
int solution(string s) {
int answer = s.length();
for(int cut = 1; cut <= s.length() / 2; cut++)
{
string word1 = s.substr(0, cut);
int cnt = 1;
string result = "";
//0부터 시작하는 것이 아니라, 그 뒤의 인덱스부터 확인하는 것이므로, cutting된 인덱스를 초기값으로 설정한다.
//증감식도 설정해야 한다.
string tmp = "";
for(int i = cut; i < s.length(); i += cut)
{
if(s.substr( i , cut ) == word1)
{
cnt += 1;
}
else
{
//기준값을 변경해야 한다.
//동일한게 없음!
if(cnt == 1)
{
tmp = word1;
}
else
{
tmp = to_string(cnt) + word1;
}
word1 = s.substr(i, cut);
cnt = 1;
result += tmp;
}
}
//이 부분 중요하다...
if(cnt == 1)
{
tmp = word1;
}
else
{
tmp = to_string(cnt) + word1;
}
result += tmp;
if(answer > result.length())
answer = result.length();
}
return answer;
}