본문 바로가기
알고리즘 문제풀이/프로그래머스

[2020 KAKAO BLIND RECRUITMENT] 문자열 압축 - 자바(Java)

by jeonghaemin 2021. 10. 15.
728x90

문제

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

풀이 코드

첫 풀이때 문자열의 길이가 1인 경우를 고려하지 못하여 풀이에 실패 했었다.
프로그래머스 채점시 테스트 5번만 실패한다면 문자열의 길이가 1인 경우를 확인해보자.

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

        //문자열 길이가 1인 경우 정답은 1
        if(s.length() == 1) {
            return 1;
        }

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

            int count = 0; //반복 횟수
            String target = s.substring(0, i); //반복 대상 문자열

            for(int j = 0; j <= s.length(); j+=i) {
                int start = j;
                int end = Math.min(i + j, s.length());

                String temp  = s.substring(start, end);

                if(temp.equals(target)) {
                    count++;
                } else {
                    //반복 횟수가 1이면 압축 문자열에 숫자를 넣지 않는다.
                    if(count > 1) {
                        sb.append(count);
                    }

                    sb.append(target);

                    target = temp;
                    count = 1;
                }
            }

            //반복 횟수가 1이면 압축 문자열에 숫자를 넣지 않는다.
            if(count > 1) {
                sb.append(count);
            }

            sb.append(target);

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

        }

        return answer;
    }
}

댓글