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;
    }
}

results matching ""

    No results matching ""