Algorithms/LeetCode

[LeetCode] 443. String Compression

junhwa100 2024. 10. 29. 11:07

1. 문제 이해

문자들의 리스트가 주어진다.

빈 문자열 s로 시작한다.

주어진 리스트에서 연속으로 반복되는 문자 그룹을 확인한다.

그룹의 길이가 1이면 해당 문자를 s에 추가한다.

그룹의 길이가 2 이상이면 해당 문자와 그룹의 길이를 s에 추가한다.(그룹의 길이가 10 이상이면 길이를 여러 문자로 나누어 추가한다.)

압축된 문자열 s를 입력 문자 리스트에 저장한다.

수정된 리스트의 길이를 리턴한다.

 

 

2. 풀이 과정

반복문으로 주어진 리스트를 돈다.

만약 현재 문자와 리스트의 다음 문자가 같다면 카운트 변수를 1 증가시킨다.

만약 다르다면 현재 문자를 빈 문자열 s에 더하고 카운트가 1보다 크다면 카운트도 s에 더한다.

s =""
cnt = 1
for i in range(0, len(chars)-1):
    if chars[i] == chars[i+1]:
         cnt += 1
         continue    
    s += str(chars[i])
    if cnt > 1:
        s += str(cnt)
        cnt = 1

 

마지막 문자의 처리를 위해 다음 코드를 추가한다.

s += str(chars[-1])
if cnt > 1:
    s += str(cnt)

 

 

3. 전체 코드

class Solution:
    def compress(self, chars: List[str]) -> int:
        s =""
        cnt = 1
        for i in range(0, len(chars)-1):
            if chars[i] == chars[i+1]:
                cnt += 1
                continue    
            s += str(chars[i])
            if cnt > 1:
                s += str(cnt)
                cnt = 1
        
        s += str(chars[-1])
        if cnt > 1:
            s += str(cnt)
        
        chars.clear()
        chars.extend(list(s))
        return len(chars)

 

 

4. 생각할 점

- 마지막 문자의 처리와 같이 놓치고 있는 부분이 있는지 생각하자.

- clear(), extend() 문법

 

 

5. 출처

- https://leetcode.com/problems/string-compression/?envType=study-plan-v2&envId=leetcode-75