프로그래머스(Java)- 문자열 압축

민지킴·2021년 3월 22일
0

프로그래머스

목록 보기
4/42
post-thumbnail

문제 링크

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

문제 풀이

문자를 1,2,3...s.length()로 쪼개는 부분은 아래처럼 구현했다.
1개식 쪼개는것부터 시작했고
전체 길이를 쪼개는 수(i)로 나눴을때 나눠떨어지지 않는경우에는
나머지 부분을 담기위해 배열에 길이에 +1을 해주었다.


	    if(s.length()%i==0){
     	 	arr = new String[s.length()/i];
            }else{
                arr = new String[(s.length()/i)+1];
            }

값을 배열에 담을때는 substring을 이용했다.
현재 단어의 길이(temp.length())가 쪼개는 수 (i) 보다 크면
temp.substring(0,i)

단어의 길이가 작을때는 단어 전부를 담아주면 되므로
temp.substring(0)을 해주었다.

            //배열에 값 넣기
            String temp = s;
             for(int j=0; j<arr.length; j++){
                 if(temp.length()>i){
                    arr[j]=temp.substring(0,i); 
                     temp = temp.substring(i,temp.length());
                 }else{
                     arr[j]=temp.substring(0);
                 }
                 
             }

코드


import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = s.length();
        
        for(int i =1; i<s.length(); i++){
            String word="";
            int cnt=1;
            String [] arr;
            if(s.length()%i==0){
                arr = new String[s.length()/i];
            }else{
                arr = new String[(s.length()/i)+1];
            }
            
            //배열에 값 넣기
            String temp = s;
             for(int j=0; j<arr.length; j++){
                 if(temp.length()>i){
                    arr[j]=temp.substring(0,i); 
                     temp = temp.substring(i,temp.length());
                 }else{
                     arr[j]=temp.substring(0);
                 }
                 
             }
            
            for(int j=0; j<arr.length; j++){
                //마지막
                if(j==arr.length-1){
                    if(arr[j].equals(arr[j-1])){
                        word+=cnt+arr[j];
                    }else{
                        if(cnt==1){
                            word+=arr[j];
                        }else{
                            word+=cnt+arr[j-1]+arr[j];
                        }
                    }
                }else{
                    if(arr[j].equals(arr[j+1])){
                        cnt++;
                    }else{
                        if(cnt==1){
                            word+=arr[j];
                        }else{
                            word+=cnt+arr[j];
                            cnt=1; 
                        }

                    }
                }
                
                
            }
            // System.out.println(word);
            // System.out.println(Arrays.toString(arr));
            if(answer>word.length()){
                answer=word.length();
            }
        }
        
        
        return answer;
    }
}
profile
하루하루는 성실하게 인생 전체는 되는대로

0개의 댓글