[JS]_daily coding #21

seul·2022년 6월 22일
0

Algorithm

목록 보기
20/31

코플릿 20_compressString


섹션2의 마지막 문제답게 어려웠다. 시간 안에 풀지 못해서 레퍼런스 코드를 보고나서 풀었다.

수도코드

  1. 문자열 입력받 3개 이상 연속된 문자열이 있을 경우에는 연속된 구간을 (반복횟수 + 반복 문자열1개)로 변환시킨 문자열을 반환한다.
  2. 결과를 담아줄 빈문자열을 선언한다.
  3. 반복횟수를 체크해줄 count 변수를 선언해주고 1을 할당한다.
  4. 빈문자열을 입력받은 경우는 빈문자열을 리턴한다.
  5. 연속된 문자를 판별하기 위해서는 문자열을 순회하면서 하나씩 판별해야 하기 때문에 반복문을 만든다.
  6. 문자열이 연속하는 경우(str[i] === str[i + 1]) count를 1증가 시킨다.
  7. 연속되지 않고 count가 3이상이면 3a 형태로 결과 문자에 담아준다.
  8. 연속되지 않고 count가 3미만이면 카운트를 붙이지 않고 결과 문자에 담는다.
  9. count를 초기화한다.
  10. 결과를 반환한다.

코드

function compressString(str) {
  let result = '';
  let count = 1;

  if (str.length === 0) {
    return '';
  }
  
  for (let i = 0; i < str.length; i++) {
    if (str[i] === str[i + 1]) {
      // 연속한 문자열인 경우
      count++;
    } else {
      // 연속하지 않는 경우 
      // 반복된 횟수가 3이상일 경우에만 압축한다.
      // 그렇지 않은 경우에는 문자만 할당하고 
      //카운트를 초기화한다.
      if (count >= 3) {
        result += count + str[i];
      } else {
        result += str[i].repeat(count);
      }
      count = 1;
    }
  }
  return result;
}

마지막 비교의 경우에는 문자열의 마지막 요소와 undefined를 비교해서 else부분으로 넘어간다.

profile
Connecting dots

0개의 댓글