문자가 반복되는 갯수 만큼 숫자로 표기하여 문자열 크기를 가장작게 줄인 길이를 반환하는 문제
https://school.programmers.co.kr/learn/courses/30/lessons/60057
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
// LV.2 문자열 압축
public static int solution_TextCompression(String s) {
int answer = s.length();
for (int i = 1; i <= Math.floor(s.length() / 2); i++) { // 문자 단위
int cnt = 0, eqcnt = 0; // 반복 횟수, 같은문자 카운트
int min = s.length(); // 압축 문자 길이
String prevword = s.substring(0, i); // 이전 문자
while (cnt++ < s.length() / i) { // 최대 문자열 반까지 자름
// 현재 문자열 (마지막에 i개로 안잘릴수있으므로 마지막 카운트엔 length를 넣음)
String str = s.substring(i * cnt, Math.min(i * (cnt + 1), s.length()));
if (prevword.equals(str)) eqcnt++; // 이전 문자와 같을 시 카운트 증가
else if (eqcnt > 0) { // 같은문자 카운트 끝났으면 줄어든 문자 수 계산
// 줄어든 문자 수 계산 : (잘린 단위 X 반복된횟수-1 ) + 반복횟수 자릿 수(10일경우 2이므로)
min = min - ((eqcnt) * i) + ((int) Math.log10(eqcnt + 1) + 1);
eqcnt = 0; // 같은문자 카운트 초기화
}
prevword = str; // 이전 문자에 현재문자 저장
}
if (min < answer) answer = min; // i개로 잘랐을때의 갯수가 최솟값보다 작으면 갱신
}
return answer;
}
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] LV2. 거리두기 확인하기 (0) | 2023.03.15 |
---|---|
[Programmers] LV2. 124나라의 숫자 (0) | 2023.03.15 |
[Programmers] LV2. 멀쩡한 사각형 (0) | 2023.03.15 |
[Programmers] LV2. 오픈채팅방 (0) | 2023.03.15 |
[Programmers] LV2. 더 맵게 (0) | 2023.03.13 |