#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* rr(const char* s) {
if (*s == '\0') return (char*)s;
char* c
= (char*)malloc(2 * len
+ 1); // 최악의 경우 (문자 + 숫자) if (!c) return NULL; // 메모리 할당 실패 처리
int cnt = 1;
int j = 0;
// 문자열 압축 처리
for (int i = 1; i < len; ++i) {
if (s[i] == s[i - 1]) {
cnt++;
} else {
j
+= sprintf(c
+ j
, "%c%d", s
[i
- 1], cnt
); cnt = 1;
}
}
j
+= sprintf(c
+ j
, "%c%d", s
[len
- 1], cnt
);
// 압축된 문자열의 길이가 원본 문자열보다 짧으면 압축된 문자열을 반환
return c;
}
// 원본 문자열을 그대로 반환
return (char*)s;
}
int main() {
char input[1001];
if (scanf("%1000s", input
) != 1) { return 1; // 입력 오류 처리
}
char* result = rr(input);
if (result) {
if (result != input) {
free(result
); // 동적 메모리 해제 }
} else {
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKY2hhciogcnIoY29uc3QgY2hhciogcykgewogICAgaWYgKCpzID09ICdcMCcpIHJldHVybiAoY2hhciopczsKCiAgICBpbnQgbGVuID0gc3RybGVuKHMpOwogICAgY2hhciogYyA9IChjaGFyKiltYWxsb2MoMiAqIGxlbiArIDEpOyAgLy8g7LWc7JWF7J2YIOqyveyasCAo66y47J6QICsg7Iir7J6QKQogICAgaWYgKCFjKSByZXR1cm4gTlVMTDsgIC8vIOuplOuqqOumrCDtlaDri7kg7Iuk7YyoIOyymOumrAoKICAgIGludCBjbnQgPSAxOwogICAgaW50IGogPSAwOwoKICAgIC8vIOusuOyekOyXtCDslZXstpUg7LKY66asCiAgICBmb3IgKGludCBpID0gMTsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgaWYgKHNbaV0gPT0gc1tpIC0gMV0pIHsKICAgICAgICAgICAgY250Kys7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaiArPSBzcHJpbnRmKGMgKyBqLCAiJWMlZCIsIHNbaSAtIDFdLCBjbnQpOwogICAgICAgICAgICBjbnQgPSAxOwogICAgICAgIH0KICAgIH0KICAgIGogKz0gc3ByaW50ZihjICsgaiwgIiVjJWQiLCBzW2xlbiAtIDFdLCBjbnQpOwoKICAgIC8vIOyVley2leuQnCDrrLjsnpDsl7TsnZgg6ri47J206rCAIOybkOuzuCDrrLjsnpDsl7Trs7Tri6Qg7Ken7Jy866m0IOyVley2leuQnCDrrLjsnpDsl7TsnYQg67CY7ZmYCiAgICBpZiAoc3RybGVuKGMpIDwgbGVuKSB7CiAgICAgICAgcmV0dXJuIGM7CiAgICB9CgogICAgLy8g7JuQ67O4IOusuOyekOyXtOydhCDqt7jrjIDroZwg67CY7ZmYCiAgICBmcmVlKGMpOwogICAgcmV0dXJuIChjaGFyKilzOwp9CgppbnQgbWFpbigpIHsKICAgIGNoYXIgaW5wdXRbMTAwMV07CiAgICBpZiAoc2NhbmYoIiUxMDAwcyIsIGlucHV0KSAhPSAxKSB7CiAgICAgICAgcHJpbnRmKCJJbnB1dCBlcnJvclxuIik7CiAgICAgICAgcmV0dXJuIDE7ICAvLyDsnoXroKUg7Jik66WYIOyymOumrAogICAgfQoKICAgIGNoYXIqIHJlc3VsdCA9IHJyKGlucHV0KTsKICAgIGlmIChyZXN1bHQpIHsKICAgICAgICBwcmludGYoIiVzXG4iLCByZXN1bHQpOwogICAgICAgIGlmIChyZXN1bHQgIT0gaW5wdXQpIHsKICAgICAgICAgICAgZnJlZShyZXN1bHQpOyAgLy8g64+Z7KCBIOuplOuqqOumrCDtlbTsoJwKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIHByaW50ZigiTWVtb3J5IGVycm9yXG4iKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=