새소식

프론트엔드 공부/자료구조 & 알고리즘

문자열을 입력받아 연속되는 문자가 있을 경우, 연속 구간을 반복되는 수와 문자로 조합한 형태로 압축한 문자열을 리턴해야 합니다.

  • -

compressString

문제

문자열을 입력받아 연속되는 문자가 있을 경우, 연속 구간을 반복되는 수와 문자로 조합한 형태로 압축한 문자열을 리턴해야 합니다.

입력

인자 1 : str

  • string 타입의 알파벳 문자열

출력

  • string 타입을 리턴해야 합니다.

주의 사항

  • 빈 문자열을 입력받은 경우, 빈 문자열을 리턴해야 합니다.
  • 3개 이상 연속되는 문자만 압축합니다.

입출력 예시

let output = compressString('abc');
console.log(output); // --> abc

output = compressString('wwwggoppopppp');
console.log(output); // --> 3wggoppo4p

코드

// 작성코드
function compressString(str) {
// count 변수를 1로 설정
  let count = 1;
  // 새로운 문자열을 저장할 변수
  let newStr = '';
  // str의 길이만큼 반복
  for (let i = 0; i < str.length; i++) {
    // 현재 문자와 다음 문자가 같으면
    if (str[i] === str[i + 1]) {
      // count를 증가
      count++;
    } else {
      // count가 3 이상이면
      if (count >= 3) {
        // count와 현재 문자를 새로운 문자열에 추가
        newStr += count + str[i];
      } else {
        // count가 3 미만이면, str의 i-count+1부터 i까지의 문자열을 새로운 문자열에 추가
        // substring(x, y) 메소드는 string 객체의 시작 인덱스(x)로 부터 종료 인덱스(y) 전 까지 문자열의 부분 문자열을 반환
        newStr += str.substring(i - count + 1, i + 1);
      }
      // count를 1로 초기화
      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;
}
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.