티스토리 뷰

728x90
class Solution {
    public int solution(String s) {
        //MAX_VALUE는 Infinity처럼 사용된 것. 
        int answer = Integer.MAX_VALUE;
        int len = s.length();
        
        if(s.length()==1) return 1;
        
        //1부터 1씩 더해가며 패턴길이 만들기.
        for (int i=1; i<=len/2; i++) {
            String pattern = s.substring(0,i);
            //위에서 패턴을 잘랐으므로 명시적으로 1개.
            int cnt = 1;
            String reStr = "";
            //패턴 다음부터 시작/패턴 길이만큼 빼주고/패턴의 길이만큼씩
            for (int r=i; r<=s.length()-i;r+=i) {
                //패턴만큼 움직이며 같을때까지 더해줌.
                if (pattern.equals(s.substring(r,r+i)))
                    cnt++;
                //패턴이 틀린 순간 그 앞에 패턴이 있었다면 숫자추출.
                else {
                    if (cnt>1) {
                        //String + int는 String으로 형변환 됨.
                        reStr += cnt+"";
                    }
                    //패턴추출.
                    reStr += pattern;
                    //틀린 패턴부터 다시 패턴 시작.
                    pattern = s.substring(r,r+i);
                    //cnt도 초기화.
                    cnt = 1;
                }
            }
            //맨 마지막값만 따로 처리.
            if (cnt > 1) {
                reStr += "" + cnt;
            }
            reStr += pattern;
            
            //패턴을 돌고 남은 값.
            int div = s.length()%i;
            //맥스값/이어붙인 string길이+남은 값 중 작은 값.
            answer = Math.min(answer, reStr.length()+div);
        }
        
        return answer;
    }
}

소스코드: https://loosie.tistory.com/440#

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함