byeol2ing 2021. 9. 17. 18:57
반응형
import java.util.*;
class Solution {
    //1. (1부터 문자열 길이/2)개 씩 반복하여 같은지 비교 하여 압축
    //2. 더 짧은 문자열길이 분석하는 함수를 만들어 더짧은지 비교 후 짧은 값 대입
    public int solution(String s) {
        int answer = s.length();
    
        
        for(int i=1; i<=s.length()/2; i++){
            int pos =0;
            int len = s.length();
            for( ;pos+i<=s.length(); ){
                String now = s.substring(pos,i+pos);
                pos += i;
                int cnt = 0;
                
                for( ;pos+i<=s.length(); ){
                    if(now.equals(s.substring(pos, i+pos))){
                        ++cnt;
                        pos += i;
                    }else{
                        break;
                    }
                }
                
                if(cnt > 0){
                    len -= i*cnt;
                    if(cnt <= 9){
                        len += 1;
                    }else if(cnt <= 99){
                        len += 2;
                    }else if(cnt <= 999){
                        len += 3;
                    }else{
                        len += 4;
                    }
                }
                
                
                
            }
            answer = Math.min(answer, len);
            
        }
        
        return answer;
    }
}

이건.. 테스트케이스 두개정도가 실패로 뜬다.........ㅠㅠ

 

사실 이문제는 처음보았을땐 띠용.... 머리가 새하얘졌었다. 그래서 유튜브에 혹시 강의가 있나 보고 강의를 보고 그대로 다시 풀어본 문제이다...!

 

이문제의 핵심은 //1. (1부터 문자열 길이/2)개 씩 반복하여 같은지 비교 하여 압축
                     //2. 더 짧은 문자열길이 분석하는 함수를 만들어 더짧은지 비교 후 짧은 값 대입

                     이외에도 position(위치 변수를)두어 해당 위치까지의 문자열을 비교하는 방법을 생각해내는것이 관건이었던것 같다......................!

 

 

이문제는 꼭 다시한번 풀어보아야 할 것 같다 ...............

반응형