Javascript Algorithm : compressString

Young-mason·2020년 9월 19일
0

Algorithm

목록 보기
1/4

javascript 연속되는 문자가 있을 경우, 반복되는 숫자와 문자로 조합한 형태로 압축하기

푸는데 가장 많은 시간을 들였던.. 기억에 남는 알고리즘 마지막 문제

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

  • 빈 문자열을 입력받은 경우, 빈 문자열을 리턴
  • 3개 이상 연속되는 문자만 압축
function compressString(str) {
  // count 가 3 이상이고, str[i] !== str[i+1]   count와 str[i]
  // count 를 세어줍니다
  // 연속될경우 count + 1;
  // 연속되지않을경우 count 3이상이면 카운트 붙이고 알파벳
  // 연속되지않을경우 count 3미만이면 카운트 안붙이
  
  let comp = '';
  let count = 1;

  if (str.length === 0) {
    return '';
  }
  // 모든 문자를 count + string 형식으로 압축
  for (i=1; i<=str.length; i++) {
    if (str[i] === str[i-1]) {
      count = count + 1;
    } else if (str[i] !== str[i-1] || str[i] === undefined) {
        comp = comp + count + str[i-1];
        count = 1;
    }      
  }

  // for문을 돌면서 만약 count < 3 인경우, 해당숫자만큼 문자 입력
  // '3w2g1o2p'
  // 1인경우 패쓰..   2인경우, 문자, str[i+1] 를 더해준다.

  let result = '';
  console.log(comp, result)  
  for (i=0; i<comp.length; i++) { 
    if (comp[i] === '1') {
      result = result;
    } else if (comp[i] === '2') {
      result = result + comp[i+1];
    } else {
      result = result + comp[i]
    }
  }
  return result;
}

저는 입력받은 문자열을 연속되는 숫자와 알파벳으로 압축시킨 문자열을 만들고, 연속된 숫자가 2인경우는 알파벳하나를 추가, 3이상인 경우는 연속되는 숫자를 붙이는 방식으로 문제를 해결하였습니다.

1개월 후 이 문제를 다시 풀었고 조금더 간략하게 코드를 짜게 되어 여기다가 올립니다.

function compressString(str) {
  let count = 1;
  let result = '';
  for(i=0; i<str.length; i++) {
    if (str[i] === str[i+1]) {
      count += 1;
    } else {
      if (count >= 3) {
        result += count + str[i];
        count = 1;
      } else {
          for (j=1; j<=count; j++) {
           result += str[i];
         }
        count = 1;
      }
    }
  }
  return result;
}
profile
Frontend Developer

0개의 댓글