반응형
1. 문제
- 문자열 배열 chars가 주어질 때, 아래 알고리즘에 따라 압축한 문자열 길이를 반환하라.
- 빈 문자열 s부터 시작.
- 연속되는 동일한 문자열을 그룹화.
- 그룹화한 문자열 길이가 1인 경우, 다음 문자열에 붙인다.
- 원본 배열 chars를 수정하여 압축한 결과를 담아 길이를 반환한다.
- a, a, b, b, b, c, c는 a,2,b,2,c,2로 압축.
- a, b, b, b,b ... 에서 a는 그룹 길이가 1이므로, a, b, 1, 2로 압축.
2. 해결
function compress(chars: string[]): number {
let s = ''
let current = chars[0];
let count = 0;
for(let i = 0; i< chars.length; i++) {
if(current !== chars[i]) {
s += current + (count !== 1 ? count : '');
count = 0;
current = chars[i];
}
count++;
}
s += current + (count !== 1 ? count : '');
const sArr = s.split('')
for(let i =0; i<s.length; i++) {
chars[i] = sArr[i];
}
chars.splice(s.length)
return chars.length;
};
- chars를 탐색하면서, 현재 문자열이 변경되면 s에 count와 함께 담는다. (count가 1이 아닌 경우만)
- count와 current 갱신.
- 완성된 s를 배열로 나눠 chars에 담아준다.
- chars 뒤에 남는 문자열은 splice로 제거.