조앤의 기술블로그

[프로그래머스 / 카카오] 문자열 압축 (java) 본문

Programming/프로그래머스

[프로그래머스 / 카카오] 문자열 압축 (java)

쬬앤 2020. 3. 23. 15:01

[문제]

 

 

[문제접근]

어렵게만 생각했는데 2개 단위로 압축 , 3개단위로 압축단위가 분리(?) 되어있는 것이었다!!!

문제를 끝까지 꼼꼼히 잘읽자!

 

for(int i = 1; i <= s.length(); i++) {
			for(int j = 0; j <= s.length()-i; j++) {
				String tmp = "";
				tmp = s.substring(j, j+i);
				
				//System.out.println(tmp);
				String bin = s.substring(j+i, j+i+i);
				if(tmp == bin) {
					
				}
			}
		}

처음엔 이렇게 엄청 복잡하게 생각했다; (단위 구하는 부분)

 

for(int len = 1; len < s.length; len++){
            String target = "";
            //단위 지정
            for(int i = 0; i < len; i++){
                target += s.charAt(i);
            }
            

나중에 이렇게 수정!!

 

class Solution {
    public int solution(String s) {
        int answer = 987654321;
        
        for(int len = 1; len < s.length(); len++){
            String target = "";
            String result = ""; //압축된 문자열
            String current = ""; //단위와 비교할 현재 문자열
            int count = 1;
            
            //단위 지정
            for(int i = 0; i < len; i++){
                target += s.charAt(i);
            }
            
            //단위만큼 자른다. 
            // 단위 다음 문자랑 비교해야 하므로 len부터 시작
            for(int i = len; i < s.length(); i+=len){
                current = "";
                // 현재 비교할 문자열 만들기
                for(int j = i; j < i + len; j++){
                    if(j >= s.length()) break;
                    current += s.charAt(j);
                }
                // 이것도 3중 for문을 피할 수 없는 것인가..
                
                if(target.equals(current)){
                    count++;
                } else {
                    if(count > 1)
                        result += count + target;
                    else
                        result += target;
                    count = 1;
                    target = current;
                }
            }
            if(count > 1)
                result += count + target;
            else
                result += target;
            
            int length = result.length();
            if(answer > length)
                answer = length;
            
        }
        
        if(answer == 987654321) answer = 1;
        return answer;
    }
}

 

 

[참고]

https://keepgoing0328.tistory.com/entry/2020카카오-공채-문자열-압축-자바

 

[ 프로그래머스- 2020카카오 공채 ] 문자열 압축 (java)

프로그래머스 2020 카카오 공채 문자열 압축 (자바) 문자열 s에서 연속으로 반복해서 나타나는 구간을 압축하는데, 가장 많이 압축했을 때 길이 구하기 aaaccc -> 3a3c ( 단위 1 ) abcabcabcddd -> 3abcd ( 단위 3..

keepgoing0328.tistory.com

https://velog.io/@hyeon930/프로그래머스-문자열-압축-Java

 

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

프로그래머스 문자열 압축완전탐색 문제로 구현에 조금 신경을 쓰면 쉽게 풀 수 있는 문제였다. String 비교로 구현하면 시간초과가 나지 않을까 걱정하여 다른 방법을 열심히 생각해봤지만 모두 구현이 어렵거나 더 오래걸릴 것 같아서 String 비교로 구현을 했는데 다행

velog.io

[문제 링크]