🔔Thinking
- min(최솟값)은 String s의 길이로 초기화함.
- i(1 ~ s.length()/2)만큼 문자열을 자르면서 for문 반복
-> s.length()/2이상 만큼 자르면 어차피 2번 이상 반복 불가능함
- past(이전 토큰을 저장)에 문자열을 i만큼 잘라서 초기화함.
- i만큼 토큰을 잘라서 past와 비교
-> cnt는 최솟값이 1(무조건 하나 이상씩 있어서)
-> 같으면 cnt ++
-> 다른 토큰이 나오면 cnt+past을 붙여서 문자열을 압축함
s.length를 넘어가면 안되므로 end 인덱스를 따로 계산함
- for문이 끝나고 남은 문자열(past)을 이어붙여줌. 그리고 min보다 작으면 min에 넣는다.
🔑Solution
import java.util.*;
class Solution {
public int solution(String s) {
int min = s.length();
for(int i=1; i<=s.length()/2; i++){
String result="";
String past=s.substring(0,i);
int cnt=1;
for(int j=i; j<=s.length(); j+=i){
int end = Math.min(j + i, s.length());
String now=s.substring(j,end);
if(past.equals(now)){
cnt++;
}
else {
if(cnt>=2){
result+=cnt;
}
result+=past;
past=now;
cnt=1;
}
}
result+=past;
if(min > result.length())
min=result.length();
}
return min;
}
}