[프로그래머스] 절대 외부 IDE를 써선 안돼/Java

[lv2] 문자열 압축

SH3542 2024. 12. 28. 16:19

https://school.programmers.co.kr/learn/courses/30/lessons/60057

 

 

정수의 자릿수를 구하는 동작 (정답 받고 풀이 찾아보다 발견)

- String.valueOf(num).length() => (int) Math.log10(num) + 1

 

헤맨 부분

- 압축 횟수 >= 10인 경우가 존재한다.

 

class Solution {
    public int solution(String s) {
        int S = s.length();
        int answer = S;

        for(int i = 1; i < S; i++) {
            int st = 0;
            String prev = "";
            int sum = 0;
            int cnt = 1;

            for(int ed = st + i; ed <= S; st += i, ed += i) {
                String sub = s.substring(st, ed);

                if(prev.equals(sub)) {
                    cnt++;
                }
                else {
                    sum += i;

                    if(cnt != 1)
                        sum += (int) Math.log10(cnt) + 1;

                    prev = sub;
                    cnt = 1;
                }
            }

            if(cnt != 1)
                sum += (int) Math.log10(cnt) + 1;

            answer = Math.min(answer, sum + S - st);
        }

        return answer;
    }
}