String Compression

ㅋㅋ·2023년 3월 2일
0

알고리즘-leetcode

목록 보기
122/135

char가 담긴 벡터를 받고 char가 2번 이상 연속적으로 나타나는 만큼

char가 아닌 숫자로 나타내어 string을 압축하는 문제

조건으로 constant extra space만을 사용해야 한다.

class Solution {
public:
    int compress(vector<char>& chars) {
        
        int insertIndex{0};
        int charIndex{0};
        int result{0};
        for (int i = 0; i < chars.size();)
        {
            int count{0};
            charIndex = i;
            while (i < chars.size() && chars[charIndex] == chars[i])
            {
                ++count;
                ++i;
            }

            chars[insertIndex] = chars[charIndex];
            if (count != 1)
            {
                ++result;
                if (count < 10)
                {
                    ++result;
                    chars[insertIndex + 1] = '0' + count;
                    insertIndex += 2;
                }
                else
                {
                    int insertCount{0};
                    while (count != 0)
                    {
                        auto division = std::div(count, 10);
                        count = division.quot;
                        chars.insert(chars.begin() + insertIndex + 1, '0' + division.rem);
                        ++insertCount;
                        ++result;
                        ++i;
                    }

                    insertIndex += (insertCount + 1);
                }
            }
            else
            {
                ++result;
                ++insertIndex;
            }
        }

        return result;
    }
};

0개의 댓글