[Java] 문자열 압축 - Lv2 프로그래머스 2020 KAKAO BLIND

P.S./프로그래머스 2023. 3. 23. 07:22
728x90
728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이


하나도 겹치지 않아 최소길이가 s의 길이가 될 수 있으므로 answer는 length에서 출발.

그냥 단순히 변수 생성으로 이전값과 현재값을 비교하여 sentence 변수 안에 넣어서 answer의 최소값을 Math.min()메서드를 사용하여 뽑아냈다.

 

substring()을 활용하여 자를 수 있는 최대의 경우의 수는 s가 짝수던 홀수던 간에 s.length()/2 만큼이다.

또한 end의 길이는 s의 길이보다 길 경우 에러가 발생되기 때문에 마찬가지로 min()메서드를 활용하여 최대 길이의 조건을 주었다.

class Solution {
	
    public int solution(String s) {
        int answer = s.length();
        int count = 1;
        String prev = "";
        String next = "";
        String sentence;
        
        for(int i=1; i<=s.length()/2; i++){
        	sentence = "";
            prev = s.substring(0, i);
            
            for(int j=i; j<=s.length(); j+=i){
                int end = Math.min(j + i, s.length());
                next = s.substring(j, end);
                
                if(prev.equals(next)) count++;                
                else {
                	if(count >= 2) sentence += count;                    
                    sentence += prev;
                    prev = next;     
                    count = 1;
                }
            }
            sentence += prev;
            answer = Math.min(answer, sentence.length());
        }
        return answer;
    }
}

728x90
300x250
mag1c

mag1c

2년차 주니어 개발자.

방명록