티스토리 뷰

728x90
반응형

프로그래머스 문자열 압축

문제 링크

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

 

코딩테스트 연습 - 문자열 압축

데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자

programmers.co.kr

문제 풀이

저는 스택을 이용하여 풀었습니다.

 

전체적인 프로세스는 이렇습니다.

 

1. 1부터 입력으로 들어온 String의 크기까지 잘라 Stack에 넣는다.

2. 스택에서 꺼낸다.

 2-1) 스택에서 꺼낸 값이 문자열일 경우 반복된 횟수 num 변수에 1을 넣는다.

 2-2) 스택에서 꺼낸 값이 숫자일 경우 반복된 횟수 num 변수에 넣는다. 다시 스택에서 문자열을 꺼낸다.

3. 스택에서 꺼낸 문자열과 stack의 top 위치의 문자열을 비교한다.

 3-1) 같을 시 num+1하여 stack에 넣는다.

 3-2) 다를 시 num의 자리값과 문자열의 크기를 더한다.

4. 1-3을 반복하여 최솟값을 answer에 넣는다. 

소스 코드
import java.util.*;

class Solution {
    public static  int solution(String s) {
        int answer = Integer.MAX_VALUE;

        for(int i=1;i<=s.length();i++) {
        	Stack<String> st = new Stack<>();
        	int len = s.length()/i;
        	for(int j=0; j<=len;j++) {
        		if(j==len) st.add(s.substring(j*i));
        		else st.add(s.substring(j*i,(j+1)*i));
        	}
            int size=0;
        	while(!st.isEmpty()) {

        	    String word = st.pop();

        	    int num=1;
            	    if(word.matches("[0-9]{1,}")) {
            		    num= Integer.parseInt(word);
            		    word = st.pop();
            	    }
                    try {
                        if(word.equals(st.peek())) {
                            st.add(""+(num+1));
                        }else {

                            if(num != 1) size += Math.ceil(Math.log10(num+1))+ word.length();
                            else size += word.length();
                        }
                    } catch (Exception e) {
                        if(num != 1) size += Math.ceil(Math.log10(num+1))+ word.length();
                        else size += word.length();
                    }
        	}
        	answer = Math.min(answer, size);
        }

        return answer;
    }
}
728x90
반응형
250x250
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함