[프로그래머스] 문자열압축

2020. 3. 30. 14:38프로그래머스/카카오

import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = s.length();
        
        for(int i=0; i<s.length()-1; i++){
            List<String> temp = new ArrayList<>();
            
            for(int j=0; j<s.length(); j++){
                if(j+i+1 > s.length()){
                    String flag = s.substring(j);
                    temp.add(flag);
                    break;
                }
                else{
               String flag=s.substring(j,j+(i+1));
               temp.add(flag);
               j=j+i;
                }
            } // i개씩 쪼갠 문자열 배열 완성
           answer = Math.min(answer,count(temp));
            
        }
        
        return answer;
    }
    
    public int count(List<String> temp){
       String flag = temp.get(0);
       int press = 1;
       String result ="";
        int retlen =0;
        
        for(int i=1; i<temp.size(); i++){
            if(temp.get(i).equals(flag)){
                press ++;
            }
            else{
                if(press!=1){
                    
                result += Integer.toString(press) + flag;
                    
                flag=temp.get(i);
                press=1;
                }else{
                    result += flag;
                    flag = temp.get(i);
                    press=1;
                    
                }
            }
            
            if(i==temp.size()-1){
                if(press!=1){
                result += Integer.toString(press) + flag;
                
                }
                else{
                    result += flag;
                }
            }
        }
        retlen = result.length();
        
        return retlen;
    }
}

count함수는 갯수별로 쪼개진 리스트를 가져와서 새로운 문자열을 만들어 그 길이를 반환해주는 메소드이다.

문자열의 길이를 변화시키면서 그 잘려진 문자열 리스트를 재조합하여 길이를 각각 구하여 최소값을 업데이트 시키는 방식을 사용하였다.