[프로그래머스] 문자열 압축 - Java, 자바

Kim Ji Eun·2022년 3월 15일
0

난이도

레벨2

문제

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

풀이

substring으로 접근해 수도코드를 쓰며 풀어보려고 했지만 확신이 없어서 문제 풀이를 참고했다.
(++ 확신 없어도 코드로 바꿔서 풀어보자 코드 치면서 리팩토링 할 수 있으니 )

코드

class Solution {
    public int solution(String s) {
        int min = s.length();
        
        for(int i=1;i<=s.length();i++){
            int compLeng = compression(s,i).length();
            min = Math.min(min, compLeng);
        }
        return min;
    }
    
    private String compression(String str, int i){

        int count =1;
        String compression = "";
        String pattern = "";
        
        for(int j=0;j<=str.length()+i;j+=i){
            String nowStr;
        
            // 전 문자열과 비교할 현재 문자열
            if (j >= str.length()) { // 현재 문자열이 없을 때
              nowStr = "";
            } else if (str.length() < j + i) { // 마지막 현재 문자열일 때
              nowStr = str.substring(j);
            } else {
              nowStr = str.substring(j, j + i); // 그 외
            }

            // 1. 전문자열이랑 똑같은지 비교한다 (맨처음이면 비교 x)
            if(j!=0){
                if(nowStr.equals(pattern)){ //똑같으면 
                    count++;
                }else if(count>=2){ // 다르고 count가 2회이상이면 압축가능
                    compression+=count+pattern;
                    count =1;

                }else{// 압축 불가능하면 그냥 그대로 문자열 이어붙이기 
                    compression+=pattern;
                }
            }
            //2. i길이만큼 문자열을 자른다 
            pattern = nowStr;
        }
        return compression;
    }
   
}

참고
https://velog.io/@ajufresh/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%95%95%EC%B6%95-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-Java

profile
Back-End Developer

0개의 댓글