ALGORITHM/PROGRAMMERS

[프로그래머스] 문자열 압축 (2020 KAKAO BLIND RECRUITMENT)

0298 2021. 3. 5. 22:41

programmers.co.kr/learn/courses/30/lessons/60057

 

코딩테스트 연습 - 문자열 압축

데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문

programmers.co.kr

2021-03-05


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Solution60057 {
    public static int solution(String s) {
        int answer = s.length();
        for(int i = 1; i <= s.length()/2; i++) {
            int sum = 0;
            int count = 0;
            for(int j = 0; j <= s.length() - i; j+=count*i) {
                String str = s.substring(j, j+i);
                count = 1;
                for(int k = j+i; k <= s.length() - i; k+=i) {
                    String comp = s.substring(k, k+i);
                    if(str.equals(comp)) count++;
                    else break;
                }
                sum += ((count == 1) ? 0 : (String.valueOf(count).length())) + str.length();
            }
            sum += s.length() % i;
            answer = Math.min(sum, answer);
        }
        return answer;
    }
 
    public static void main(String[] args) {
        String s = "ababcdcdababcdcd";
        System.out.println(solution(s));
    }
}
cs

 

#문제풀이

그냥 직관적으로 풀었다. 

 

문자열의 길이도 길지 않아서, 문자를 1개 단위부터 ~ s.length()/2개 단위까지 나눠서 잘라보았다. 

 

그리고 자른 문자열을 비교해가면서 같은 문자끼리 묶어서 길이를 계산하였고, 그 중 가장 짧은 것의 길이를 return 하였다.