CodingTest/LeetCode

[LeetCode] 443. String Compression, Medium

뜸부깅 2025. 4. 16. 14:02
반응형

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로 제거.