본문 바로가기
Preparing Coding Test/Programmers L2

[Java/프로그래머스] 문자열 압축

by weero 2020. 8. 15.

문제

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

 

코딩테스트 연습 - 문자열 압축

데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자

programmers.co.kr

 

 

시행착오

중첩된 for문의 기준을 어떻게 두어야 할지 많이 헷갈렸다...

덧셈보다 곱셈으로 하는 것이 횟수가 깔끔하게 떨어질 것 같았음

 

 

코드

class Solution {
    public int solution(String s) {
        int answer = 1000;
        int s_len = s.length();
        int grouping_len = s.length()/2;
        if(s_len==1){
            return 1;
        }
        
        for(int i=1; i<=grouping_len ; i++){
            String compStr1 = "";
            String resultStr = "";
            int cnt = 1;
            
            for(int j=0; j<s_len/i; j++){
                String compStr2 = s.substring((i*j), (i*j)+i);
                if(compStr1.equals(compStr2)){
                    cnt++;
                    continue;
                }
                if(cnt>1){
                    resultStr += cnt+compStr1;
                }else{
                    resultStr += compStr1;
                }
                compStr1 = compStr2;
                cnt = 1;
            }
            if(cnt>1){
                resultStr += cnt+compStr1;
            }else{
                resultStr += compStr1;
            }
            //System.out.println(resultStr);
            if(s_len % i != 0){
                resultStr+= s.substring(s_len - (s_len%i), s_len);
            }
            answer = Math.min(resultStr.length(), answer);
        }
        
        return answer;
    }
}