https://leetcode.com/problems/string-compression
Q. 입력캐릭터를 다음과 같은 조건에 기반하여 압축하라.
- 문자를 출력하고 다음에 해당 문자의 수를 출력하라.
- 문자가 하나라면, 수는 skip 하라.
- Constant extra memory만을 사용하라.
- 결과는 input buffer를 그대로 사용하고, 결과 buffer의 길이를 출력하라.
Comment.
문제 자체는 평이하지만, 신경써야 할 부분들이 조금 있다.
나오는 문자수가 10을 넘는다면, 여러자리로 출력해야 하는 부분들도 그렇다.
직관대로 코드를 작성하면 큰 무리가 없다.
int compress(vector<char>& chars)
{
// 해당 chars를 압축하라.
// - 나오는 문자수를 문자후에 출력하라.
// - 문자가 하나라면, 문자후에 숫자를 생략하라.
// constant extra space만을 사용하라.
// 압축한 문자를 input된 buffer에 update하라.
// 완료되면 이 최종 buffer의 size를 반환하라.
//
//
char target = -1;
int counter = 0;
int idx = 0;
for (int k = 0; k <= chars.size(); ++k)
{
char cur = k==chars.size() ? -1 : chars[k];
if (target < 0)
{
target = cur;
counter = 1;
++idx;
}
else
{
if(target == cur)
++counter;
else
{
if (counter > 1)
{
vector<char> vNum;
while (counter > 0)
{
vNum.push_back(counter % 10 + '0');
counter /= 10;
}
for (int q = 0; q < vNum.size(); ++q)
chars[idx+q] = vNum[ vNum.size()-1-q ];
idx += vNum.size();
}
if (k < chars.size())
{
target = cur;
chars[idx++] = target;
counter = 1;
}
}
}
}
return idx;
}
'Leetcode > LeetCode75' 카테고리의 다른 글
[Two Pointers][Easy] 392. Is Subsequence (2) | 2023.12.01 |
---|---|
[Two Pointers][Easy] 283. Move Zeroes (1) | 2023.11.30 |
[Array/String][Medium] 334. Increasing Triplet Subsequence (1) | 2023.11.28 |
[Array][String] [Medium] 151. Reverse Words in a String (2) | 2023.11.26 |
[Array/String][Easy] 345. Reverse Vowels of a String (1) | 2023.11.26 |