[프로그래머스] PS/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;
    }
}

'[프로그래머스] PS > Java' 카테고리의 다른 글

[lv2] 쿼드압축 후 개수 세기  (0) 2024.12.31
[lv3] 표현 가능한 이진트리  (0) 2024.12.28
[lv2] 최솟값 만들기  (0) 2024.12.22
[lv2] 이진 변환 반복하기  (1) 2024.12.22
[lv2] 최댓값과 최솟값  (0) 2024.12.22