문자열압축

suhan cho·2022년 7월 6일
0

처음

class Compresstion_ {
    public int solution(String s) {
        int answer = 0;
        int min_length = 10000;
        int num_length = 0;
        int sum =0;

        for(int cut_length = 1; cut_length<=s.length()/2; cut_length++){
        int count = 0;
            for(int j =0; j<s.length(); j+=(cut_length*count)) {
                if (j + cut_length > s.length()) {  //abcabcdede 에서 나머지 한개 e 3개씩 묶고 나머지
                    num_length+=s.length()-j;
                    sum+=s.length()-j;
                    break;
                }
                String str = s.substring(j, j + cut_length);


                int x = j + cut_length;
                int y = j + 2 * cut_length;
                count = 1;

                while (y <= s.length() && str.equals(s.substring(x, y))) {
                    x += cut_length;
                    y += cut_length;
                    count++;
                    if (y > s.length()) break;
                }
                System.out.println("count" + count);


                sum += count * cut_length;

                if (count >= 2) num_length += (1 + cut_length); //2이 이상이면 자른길이 +1
                else if (count == 1) num_length += cut_length; //1개면 자른길이 그대로


            }
                if (sum < s.length()) num_length = s.length();
            System.out.println("길이"+num_length);
                min_length = Math.min(min_length, num_length);
                num_length = 0;
                sum=0;
        }
        answer = min_length;
        return answer;
    }
}

수정

class Compresstion_ {
    public int solution(String s) {
        int answer = s.length();
        int num_length = 0;


        for(int cut_length = 1; cut_length<=s.length()/2; cut_length++){
            int count = 1;
            String str = s.substring(0, cut_length);

            for(int j =cut_length; j<=s.length(); j+=cut_length) {
                String next = s.substring(j, j + cut_length > s.length() ? s.length() : cut_length + j);

                if (str.equals(next)) count++;
                else {
                    num_length += count != 1 ? cut_length + 1 : cut_length;
                    str = next;      
                    count = 1;       
                }
            }
                num_length +=str.length(); //나머지
            System.out.println(num_length);
                answer = Math.min(answer,num_length);
                num_length =0;
            }
            return answer;
    }
}
profile
안녕하세요

0개의 댓글