처음
class Compresstion_ {
public int solution(String s) {
int answer = 0;
int min_length = 10000;
int num_length = 0;
int sum =0;
for(int cut_length = 1; cut_length<=s.length()/2; cut_length++){
int count = 0;
for(int j =0; j<s.length(); j+=(cut_length*count)) {
if (j + cut_length > s.length()) { //abcabcdede 에서 나머지 한개 e 3개씩 묶고 나머지
num_length+=s.length()-j;
sum+=s.length()-j;
break;
}
String str = s.substring(j, j + cut_length);
int x = j + cut_length;
int y = j + 2 * cut_length;
count = 1;
while (y <= s.length() && str.equals(s.substring(x, y))) {
x += cut_length;
y += cut_length;
count++;
if (y > s.length()) break;
}
System.out.println("count" + count);
sum += count * cut_length;
if (count >= 2) num_length += (1 + cut_length); //2이 이상이면 자른길이 +1
else if (count == 1) num_length += cut_length; //1개면 자른길이 그대로
}
if (sum < s.length()) num_length = s.length();
System.out.println("길이"+num_length);
min_length = Math.min(min_length, num_length);
num_length = 0;
sum=0;
}
answer = min_length;
return answer;
}
}
수정
class Compresstion_ {
public int solution(String s) {
int answer = s.length();
int num_length = 0;
for(int cut_length = 1; cut_length<=s.length()/2; cut_length++){
int count = 1;
String str = s.substring(0, cut_length);
for(int j =cut_length; j<=s.length(); j+=cut_length) {
String next = s.substring(j, j + cut_length > s.length() ? s.length() : cut_length + j);
if (str.equals(next)) count++;
else {
num_length += count != 1 ? cut_length + 1 : cut_length;
str = next;
count = 1;
}
}
num_length +=str.length(); //나머지
System.out.println(num_length);
answer = Math.min(answer,num_length);
num_length =0;
}
return answer;
}
}