NOTE/프로그래머스

Level2 - 문자열 압축

m-inz 2022. 3. 14. 19:35
class Solution {
    public int solution(String s) {
        int min = Integer.MAX_VALUE; //answer;
        
        if(s.length() == 1) return 1;//1인경우 할 필요x
        
        for(int i =1; i<=s.length()/2; i++){
            String str=""; //압축한 문자열
            String prev=s.substring(0,i); //이전 문자열
            int count = 1;
            
            for(int j =i; j<=s.length()-i; j+=i){
                String now = s.substring(j,j+i);
                if(prev.equals(now)){ //이렇게 함으로써 뒤까지 다검사
                    count++;
                    continue; 
                }
                if(count>1){ //위에서 안걸렸는데 1넘은 경우는 해당 문자 반복 끝난거
                    str += count+prev;
                    count = 1;   
                }else{
                    str +=prev;
                }
                prev=now; //뒤에께 이제 현재 비교하는 값이엇삼~
            }
            
            //맨 마지막 경우 - 마지막에 못 붙인애들 처리~
            if(count>1){
                str+=count+prev;
                count=1;
            }else{
                str+=prev;
            }
            
            //비교 못한애들 붙임~
            if(s.length()%i!=0){
                str+=s.substring(s.length()-s.length()%i,s.length());
            }

            if(str.length()<min) min= str.length(); 
        }
        
        return min;
    }
}

다음에 다시 풀어봐야겠다,,