본문 바로가기
알고리즘 & 자료구조/프로그래머스

문자열 압축 [Java]

by 신재권 2022. 3. 12.
package programmers;

public class String_compression {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	
		System.out.println(solution("aabbaccc"));
		System.out.println(solution("ababcdcdababcdcd"));
		System.out.println(solution("abcabcdede"));
		System.out.println(solution("abcabcabcabcdededededede"));
		System.out.println(solution("xababcdcdababcdcd"));
		
		
	}
	
	public static int solution(String s) {
		int answer = s.length(); //답안길이를 문자열 길이로 초기화 
	
		for(int i=1; i<=s.length()/2; i++) { // length/2 까지 탐색 
			int level = 1; // 중복갯수 세줌 
			String str = s.substring(0, i); // 압축문자 
			StringBuilder sb = new StringBuilder(); //압축완료 
			
			for(int j=i; j<=s.length(); j+=i) {
				String next;
				
				//다음 문자 추출 
				if(i+j > s.length()) {//i+j가 넘어가면 문자열의 끝이므로, 문자열 끝까지 잘라줌
					next = s.substring(j, s.length());
				}else { // 아니면 i+j부분까지 잘라줌 
					next = s.substring(j, i+j);
				}
				
				if(str.equals(next)) { //만약 다음 문자가 같다면 
					level++; //레벨 증가 
				}else { //같지 않다면 
					if(level !=1) { //레벨이 1이 아니라면 
						sb.append(level); //레벨 추가 
					}
					sb.append(str); //압축 완료 처리 
					str = next; //저장되어 있는 문자를 압축될 문자로 저장 
					level = 1; // 레벨 1로 초기화 
				}
				
			}
			sb.append(str);
			answer = Math.min(answer, sb.length());
			
		}
		
		return answer;
	}
	


}

최대 입력값이 작음 -> 브루트포스로 구현 

문자의 길이를 늘려가면서 모두 검사 

문자의 길이를 넘어가는 값을 탐색하지 않도록 주의 -> if 처리 

 

'알고리즘 & 자료구조 > 프로그래머스' 카테고리의 다른 글

숫자 문자열과 영단어  (0) 2022.03.29
오픈채팅방  (0) 2022.03.28
신규 아이디 추천[Java]  (0) 2022.03.09
신고 결과 받기 [Java]  (0) 2022.03.08
로또의 최고 순위와 최저 순위 [Java]  (0) 2021.07.31