문자열을 입력받아 연속되는 문자가 있을 경우, 연속 구간을 반복되는 수와 문자로 조합한 형태로 압축한 문자열을 리턴해야 합니다.
function compressString(str) {
// TODO: 여기에 코드를 작성합니다.
/**
* 1.문자열을 입력 받는다.
* 2.문자열에서 반복되는 문자 3개 이상 있는 경우 (반복되는 수 + 문자)로 표현한다.
* - str이 빈문자열이면 빈 문자열 리턴
* - str을 순회한다.
* - 현재 str[idx] 와 str[idx + 1] 문자를 비교한다.
* - 같다면 count++
* - 다르다면 count >= 3 을 확인하고
* - true인 경우 newStr = count + str[idx];
* - false 인 경우 newStr += count 수만큼 str[idx]를 더해줘야한다.
* 3.수와 문자로 조합한 형태로 압축한 문자열을 리턴한다.
* - return newStr
*/
let count = 1;
let newStr = '';
for(let i = 0; i < str.length; i++){
if(str[i] === str[i + 1]){ // i : 0 -> count : 2 / i : 1 -> count : 3
count++;
}else if(count >= 3 && str[i] !== str[i + 1]){
newStr += count + str[i];
count = 1;
}else{
for(let j = 1; j <= count; j++){
newStr += str[i];
}
count = 1;
}
}
return newStr;
}
function compressString(str) {
// 연속되는 문자를 기록하기 위한 변수
// 첫 번째 문자로 초기화
let before = str[0];
// 동일한 문자의 반복 횟수
let count = 1;
// 정답으로 리턴할 문자열
let result = '';
// 마지막 부분이 연속된 문자일 경우를 위해 dummy 문자 추가
str = str + ' ';
for (let i = 1; i < str.length; i++) {
// 동일한 문자가 반복될 경우
if (before === str[i]) {
count++;
} else {
// 이전과 다른 문자일 경우,
// 반복된 횟수가 3 이상일 경우에만 압축을 한다.
if (count >= 3) {
result = result + `${count}${before}`;
} else {
result = result + before.repeat(count);
}
before = str[i];
count = 1;
}
}
return result;
}