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;
}
};