🗃️javascript/코테 프레임 문제

3-5 문자열 압축(△)

하얀성 2024. 4. 16. 16:11

 


<제출 답안>

function solution(s) {
  let baseArr = [];
  let answer = [];
  [...s].forEach((x, i) => {
    if (i !== 0 && baseArr[baseArr.length - 1] !== x) {
      answer.push(baseArr[0]);
      answer.push(baseArr.length);
      baseArr = [];
    }
    baseArr.push(x);
  });
  if (baseArr.length !== 0) {
    answer.push(baseArr[0]);
    answer.push(baseArr.length);
  }
  return answer.join("").replaceAll("1", "");
}

let str = "KKHSSSSSSSE";
console.log(solution(str));


<정답 코드>

내 코드의 문제는 역시 반복문을 돌면서 1을 제거하지 못하는 것. 

문자와 카운트만을 저장하는게 나처럼 길이를 저장하는 것보다 훨씬 직관적이고 정확도가 올라간다.

(난 이렇게 생각 안하고 싶었을까?)


<process>

처음은 1로 count 초기화해서 0부터 다음 숫자와 같은지 현재인덱스에서 다음 인덱스 문자를 확인해서

문자가 같으면 count ++

문자가 다르면 그대로 추가 및 count의 현재값을 문자열로 변환후 answer에 추가.

function solution(s){
  let answer="";
  let cnt=1;
  s=s+" ";
  for(let i=0; i<s.length-1; i++){
      if(s[i]===s[i+1]) cnt++;
      else{
          answer+=s[i];
          if(cnt>1) answer+=String(cnt);
          cnt=1;
      }
  }
  return answer;
}

let str="KKHSSSSSSSE";
console.log(solution(str));