코딩테스트
[프로그래머스] 문자열 압축_Java
오류유발자
2024. 4. 18. 17:43
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/60057
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
1. 문자열 압축 시 압축할 수 있는 문자열의 단위는 1~ 문자열의 길이/2 사이의 값이다.
2. 문자열은 처음 시작 부분부터 압축할 단위의 크기대로 나누어 압축한다.
3. 문자열의 반복 횟수가 1일 경우 숫자는 생략하고, 1 이상일 경우 반복 횟수 + 반복 문자열로 압축할 수 있다.
4. 가장 짦은 압축 문자열의 길이를 반환한다.
코드
import java.util.*;
class Solution {
public int solution(String s) {
int len = s.length();
int minLen = len;
StringBuffer sb;
for(int i=1; i<=len/2; i++){
sb = new StringBuffer();
int idx=0;
while(idx<len){
String str = s.substring(idx,idx+i);
int cnt =1;
while(idx+cnt*i < len &&
s.substring(idx+cnt*i).indexOf(str) == 0) cnt++;
sb.append(cnt !=1 ?cnt+str : str);
idx += cnt*i;
if(idx+i>len) {
sb.append(s.substring(idx));
break;
}
}
minLen = Math.min(minLen, sb.toString().length());
}
return minLen;
}
}
실행 결과

