2020 카카오공채 문자열 압축

문제

스크린샷 2020-03-19 오후 9 49 05 스크린샷 2020-03-19 오후 9 49 11

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

        for (int i = 1; i <= s.length() / 2; i++) {

            StringBuilder result = new StringBuilder();
            String prev = s.substring(0, i);
            int hit = 1;

            for (int j = i; j < s.length(); j += i) {
                int len = Math.min(j + i, s.length());
                String substring = s.substring(j, len);
                if (prev.equals(substring)) {
                    hit++;
                } else {
                    if (hit == 1) {
                        result.append(prev);
                    } else {
                        result.append(hit).append(prev);
                    }
                    prev = substring;
                    hit = 1;
                }
            }

            if (hit != 1) {
                result.append(hit).append(prev);
            } else {
                result.append(prev);
            }

            answer = Math.min(result.length(), answer);

        }

        return answer;
    }
}

풀이 방법은 간단하다.

현재 값인 substring과 이전 값인 prev를 비교해가면서 같다면 hit를 증가시키고 다르다면 result에 붙여줬다.

Intellij에서 String에 값을 더하려고 하면 알아서 StringBuilder로 바꿔준다던지, substring을 반복적으로 사용하니까 따로 변수로 빼라고 알려준다던지 하는 기능 덕분에 코드가 좀 더 깔끔해졌다.



© 2022. by minkuk

Powered by minkuk