+1 2020 KAKAO BLIND RECRUITMENT 문자열 압축

이동한·2023년 6월 16일
0

알고리즘 기출

목록 보기
11/22
class Solution {
    public int solution(String s) {
        int ans = s.length();
        
        for(int i=1; i<=s.length()/2; i++){
            String base = s.substring(0,i);
            int cnt = 1;
            StringBuilder sb = new StringBuilder();
            
            for(int j=i; j<=s.length();j+=i){
                int endIdx = Math.min(j+i,s.length());
                String curStr = s.substring(j,endIdx); // substring(start idx, endIdx) 에서 endIdx는 포함하지 않는다.
                
                if(base.equals(curStr)){
                    cnt++;
                }else{
                    if(cnt >=2){
                        sb.append(cnt);
                        sb.append(base);
                    }else{
                        sb.append(base);   
                    }
                    base = curStr;
                    cnt=1;
                }
            }
            sb.append(base);
            ans = Math.min(sb.length(),ans);
        }
        
        return ans;
        
    }
}

for 문 step과정 잘 조절하기,

substring(1,2)에서 2는 포함되지 않는다.

두번째

class Solution {
    public int solution(String s) {
        int answer = 1001;
        if(s.length()== 1) return 1;
        
        StringBuilder sb = new StringBuilder();
        
        for(int i=1; i<=(s.length()/2); i++){
            String token = s.substring(0,i);
            int cnt = 1;
            // 현재 token 길이 만큼 step 뛰어 가면서 비교 (슬라이딩 윈도우)
            for(int j=i; j<s.length(); j+=i){
                int endIdx = Math.min(j+i,s.length());
                String cur = s.substring(j,endIdx);
                
                // 현재 token과 비교하는 subString 값이 같으면 갱신
                if(cur.equals(token)) cnt++;
                else{
                    if(cnt>1){
                        sb.append(cnt);
                    }
                    cnt=1;
                    sb.append(token);
                    token = cur;
                }
            }
            if(cnt>1) sb.append(cnt);
            sb.append(token);
            answer = Math.min(answer,sb.length());
            sb.setLength(0);
        }
        
        return answer;
    }
}
profile
Pragmatic, Productive, Positivist

0개의 댓글