본문 바로가기
정리/알고리즘

프로그래머스 - 문자열압축

by Hudini30 2022. 3. 30.

프로그래머스 (코딩테스트연습) - 문자열 압축

해당 문제는 반복되는 문자를 압축하여 표현하는 문제로 몇개 단위로 압축할지는 정해져 있습니다. 반복되는 문자의 최대값은 입력 받은 문자열 길이의 1/2 이고 1개부터 그전까지 반복하는 경우를 구해 압축을 진행했습니다. 반복단위를 넘어서는 마지막 문자들은 그대로 출력하는 부분을 예외로 두고 압축 문자열을 만들어 가며 표현한 문자열 중 가장 짧은 것의 길이를 구했습니다.

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

        for(int repeatLength = 1; repeatLength <= sLength / 2; repeatLength++) {
            int start = 0;
            int repeatCount = 1;
            String temp = "";
            StringBuilder stringBuilder = new StringBuilder();
            while(start <= sLength) {
                String compareStr = s.substring(start, Math.min(start + repeatLength, sLength));

                if (temp.equals(compareStr)) {
                    repeatCount++;
                } else {
                    stringBuilder.append(repeatCount == 1 ? temp : repeatCount + temp);
                    temp = compareStr;
                    repeatCount = 1;
                }
                start += repeatLength;
                if (start > sLength) {
                    stringBuilder.append(temp);
                }
            }
            answer = Math.min(answer, stringBuilder.toString().length());
        }

        return answer;
    }

댓글