알고리즘 20 compressString

Judo·2020년 11월 15일
0
post-thumbnail

문제


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

주의사항


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

풀이 코드


내가 푼 코드

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;
}
profile
즐거운 코딩

0개의 댓글