TIL
https://school.programmers.co.kr/learn/courses/30/lessons/60057
문자열 압축
중간에 base라는걸 넣어서 했는데, 문제를 오히려 더 꼬아서 풀어버림.
5번 예시의 경우, 문제상 x2ababcdcd가 안되는데 되야하는줄 알고 base를 추가함
import java.util.*;
class Solution {
//aabbaccc -> 2a2ba3c
//for int len
public int solution(String s) {
int answer = s.length();
for(int subLen=1;subLen<s.length();subLen++) { //몇 길이로 자를지.
int subAnswer=Integer.MAX_VALUE;
// for(int base=0;base<subLen;base++) {
// StringBuilder sb=new StringBuilder(s.substring(0,base));
StringBuilder sb=new StringBuilder();
int repeatNum=1;
String subNow="";
for(int sub=0;sub<s.length();sub+=subLen) {
int endIdx=Math.min(s.length(),sub+subLen);
subNow=s.substring(sub,endIdx);
if(sub!=0) {
if(subNow.equals(s.substring(sub-subLen,sub))) { //이전과 같다면
repeatNum++;
} else { //이전과 다르다면
if(repeatNum==1) { //abcddd와 같은 경우, b와 c같은 경우. 즉 갑자기 바뀐경우
sb.append(s.substring(sub-subLen,sub)); // 이전껄 추가
} else { //aabbcc에서 b가 나온 경우, aa를 2a라고 기록해야함
sb.append(repeatNum);
sb.append(s.substring(sub-subLen,sub));
repeatNum=1; //a의 연속 갯수 기록 완료
}
}
} // sub!=base
} //sub for
if(repeatNum==1) {
sb.append(subNow);
} else {
sb.append(repeatNum);
sb.append(subNow);
}
// System.out.println("length : "+subLen+ " "+sb.toString()+" "+sb.toString().length());
answer=Math.min(answer,sb.toString().length());
// } // base for
} // 몇 길이로 자를지 for
return answer;
}
}