"Chars 라는 문자 배열을 아래 규칙에 따라 '압축' 해라"
처음엔 Map<Character, Integer> 로 각 문자의 등장 횟수를 세는 방식을 떠올렸다.
하지만 이 문제는 “각 출현 횟수”가 아니라 “연속된 그룹”을 카운트해야 한다.
예를 들어, ['a', 'a', 'b', 'a'] 의 경우
단순 빈도수로는 a:3, b:1 이지만, 그룹으로 보면 (a,2), (b,1), (a,1) 이 되어야 한다.
→ map을 쓰면 중복된 문자가 등장했을때 연속된 카운트 위에 카운트 수가 덮어씌워진다!
따라서 Map을 사용하는건 별로 좋은 선택이 아니다.
다른 방식으로 생각해보자.
class Solution {
public int compress(char[] chars) {
char prev = chars[0];
int count = 1;
int write = 0;
for(int i=1; i<chars.length; i++){
if(chars[i]==prev){
count++;
}else{
chars[write++] = prev;
if(count>1){
for(char c: String.valueOf(count).toCharArray()){
chars[write++] = c;
}
}
count = 1;
prev = chars[i];
}
}
// 마지막 그룹 처리
chars[write++] = prev;
if(count>1){
for(char c: String.valueOf(count).toCharArray()){
chars[write++] = c;
}
}
return write;
}
}

첫 번째 그룹과 마지막 그룹 처리가 중복되므로, 별도 함수로 추출해도 좋을 것 같다.