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

Elmo·2023년 4월 5일
0
post-thumbnail
post-custom-banner

🔔Thinking

  1. min(최솟값)은 String s의 길이로 초기화함.
  2. i(1 ~ s.length()/2)만큼 문자열을 자르면서 for문 반복
    -> s.length()/2이상 만큼 자르면 어차피 2번 이상 반복 불가능함
  3. past(이전 토큰을 저장)에 문자열을 i만큼 잘라서 초기화함.
  4. i만큼 토큰을 잘라서 past와 비교

    -> cnt는 최솟값이 1(무조건 하나 이상씩 있어서)
    -> 같으면 cnt ++
    -> 다른 토큰이 나오면 cnt+past을 붙여서 문자열을 압축함

    s.length를 넘어가면 안되므로 end 인덱스를 따로 계산함
  5. for문이 끝나고 남은 문자열(past)을 이어붙여줌. 그리고 min보다 작으면 min에 넣는다.

🔑Solution

import java.util.*;
class Solution {
    public int solution(String s) {
        int min = s.length();
        for(int i=1; i<=s.length()/2; i++){
            String result="";
            String past=s.substring(0,i);
            int cnt=1;
            for(int j=i; j<=s.length(); j+=i){
                int end = Math.min(j + i, s.length());
                String now=s.substring(j,end);
                if(past.equals(now)){
                    cnt++;
                }
                else {
                    if(cnt>=2){
                        result+=cnt;
                    }
                    result+=past;
                    past=now;
                    cnt=1;
                }
            }
            result+=past;
            if(min > result.length())
                min=result.length();
        }
        return min;
    }
}
profile
엘모는 즐거워
post-custom-banner

0개의 댓글