CS/알고리즘_KAKAO BLIND RECRUITMENT

2020 KAKAO BLIND RECRUITMENT : 문자열 압축

Jedy_Kim 2021. 11. 4. 19:18
728x90

https://programmers.co.kr/learn/courses/30/lessons/60057?language=java# 

 

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

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

programmers.co.kr

 

// 코드

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
32
33
34
35
36
37
38
import java.util.*;
 
 
class Solution {
    public int solution(String s) {
        
        int answer = Integer.MAX_VALUE; 
        forint interval=1; interval<=(s.length()/2); ++interval ) {
            
            String resStr = ""
            int cursor = 0, nCursor = cursor + interval, cnt = 1;
            String s1 = s.substring(cursor, cursor+interval);
            
            while( nCursor + interval <= s.length() ) { 
                String s2 = s.substring(nCursor, nCursor+interval);                
                if(s1.equals(s2)) ++cnt;
                else { 
                    if( cnt > 1 ) resStr += (cnt + s1);
                    else resStr += s1;
                    cursor = nCursor;                  
                    s1 = s2;
                    cnt = 1;
                }
                nCursor += interval;
            }
            
            // 마지막 부분을 처리해준다.
            if( cnt > 1 ) resStr += (cnt + s.substring(cursor, cursor+interval));              
            else resStr += s.substring(cursor);             
            // 마지막 부분을 처리해도 파편이 생겼을 경우가 생긴다 이 때 붙여줘야된다. -> "aaaaaaaaaab" : 4 를 추가해보자.
            if( (cursor+interval) < nCursor ) resStr += s.substring(cursor+interval).substring(nCursor - (cursor+interval)); 
            // 최솟값을 구한다
            answer = Math.min(answer, resStr.length()); 
        }
        
        return s.length() == 1 ? 1 : answer;
    }
}
cs

 

반응형