본문 바로가기
알고리즘/프로그래머스

문자열 압축

by 김어찐 2021. 9. 3.
728x90
package prog;

public class 문자열_압축 {
    public static void main(String[] args) {
        Solution_문자열_압축 s = new Solution_문자열_압축();
        //System.out.println(s.solution("aabbaccc"));
        System.out.println(s.solution("a"));
        System.out.println(s.solution("ababcdcdababcdcd"));
    }
}


class Solution_문자열_압축{
    public int solution(String s) {
        if(s.length()==1){
            return 1;
        }
        int[] answer = new int[s.length()/2+1];

        for (int i = 1; i <= s.length()/2; i++) {
            String tmpString="";
            int start = 0;
            int middle = i;
            int end = s.length();
            String tmp = s.substring(start,middle);
            int cnt = 0;
            while(middle<=end){
                if(tmp.equals(s.substring(start,middle))){
                    cnt++;
                }
                else{

                    tmpString = addString(tmpString,cnt,tmp);
                    tmp = s.substring(start,middle);
                    cnt=0;
                    continue;

                }


                tmp = s.substring(start,middle);
                start+=i;
                middle+=i;
            }
            // tmp 문자열 더하기
            tmpString=addString(tmpString,cnt,tmp);
            //꼬투리 문자열 더하기
            tmpString+=s.substring(s.length()-s.length()%i, s.length());
            answer[i] = tmpString.length();
        }
        int min=Integer.MAX_VALUE;
        for (int i = 0; i < answer.length; i++) {
            if(answer[i]!=0)min=Math.min(min,answer[i]);
        }
        return min;
    }
    public static String addString(String orign,int cnt, String attach ){
        if(cnt==1){
            orign+=attach;
        }
        else{
            orign+=(cnt+attach);
        }
        return orign;
    }
}
728x90

'알고리즘 > 프로그래머스' 카테고리의 다른 글

카카오 프렌즈 컬러링북  (0) 2021.09.03
직업군 추천하기  (0) 2021.09.03
오픈채팅방  (0) 2021.09.03
2주차  (0) 2021.08.31
프로그래머스 거리두기 확인하기  (0) 2021.08.30