class Solution {
public int solution(String s) {
int ans = s.length();
for(int i=1; i<=s.length()/2; i++){
String base = s.substring(0,i);
int cnt = 1;
StringBuilder sb = new StringBuilder();
for(int j=i; j<=s.length();j+=i){
int endIdx = Math.min(j+i,s.length());
String curStr = s.substring(j,endIdx); // substring(start idx, endIdx) 에서 endIdx는 포함하지 않는다.
if(base.equals(curStr)){
cnt++;
}else{
if(cnt >=2){
sb.append(cnt);
sb.append(base);
}else{
sb.append(base);
}
base = curStr;
cnt=1;
}
}
sb.append(base);
ans = Math.min(sb.length(),ans);
}
return ans;
}
}
for 문 step과정 잘 조절하기,
substring(1,2)에서 2는 포함되지 않는다.
class Solution {
public int solution(String s) {
int answer = 1001;
if(s.length()== 1) return 1;
StringBuilder sb = new StringBuilder();
for(int i=1; i<=(s.length()/2); i++){
String token = s.substring(0,i);
int cnt = 1;
// 현재 token 길이 만큼 step 뛰어 가면서 비교 (슬라이딩 윈도우)
for(int j=i; j<s.length(); j+=i){
int endIdx = Math.min(j+i,s.length());
String cur = s.substring(j,endIdx);
// 현재 token과 비교하는 subString 값이 같으면 갱신
if(cur.equals(token)) cnt++;
else{
if(cnt>1){
sb.append(cnt);
}
cnt=1;
sb.append(token);
token = cur;
}
}
if(cnt>1) sb.append(cnt);
sb.append(token);
answer = Math.min(answer,sb.length());
sb.setLength(0);
}
return answer;
}
}