[JavaScript][Programmers] 문자열 압축

조준형·2021년 9월 3일
0

Algorithm

목록 보기
122/142
post-thumbnail

🔎 문자열 압축

❓ 문제링크

https://programmers.co.kr/learn/courses/30/lessons/60057

📄 제출 코드

function solution(s) {
  let len = s.length;
  let str = [];
  if (len == 1) return 1;
  else {
    for (let i = 1; i <= len; i++) {
      let tmp = '';
      let cnt = 1;
      for (let j = 0; j < len; j += i) {
        let curStr = s.substr(j, i);
        let nextStr = s.substr(j + i, i);
        if (curStr == nextStr) cnt++;
        else {
          // console.log(`before tmp : ${tmp} / curStr : ${curStr} / nextStr : ${nextStr} / cnt : ${cnt}`)
          tmp = cnt > 1 ? tmp + cnt + curStr : tmp + curStr;
          // console.log(`after tmp : ${tmp}`)
          // console.log();  
          cnt = 1;
        }
      }
      str.push(tmp.length);
    }
  }
  return Math.min(...str);
}
let s = 'aabbcdcdababcdcd';
console.log(solution(s));

처음에 어떻게 구할까 생각하다가 결국 한글자씩 늘려가면서 가장 작은 규칙을 찾아야겠다고 생각했다.
2중포문을 이용해 구현하다가 어디선가 꼬여서 결국 다른사람의 코드를 참고하면서 작성했다.
꼬였던 이유가 문자열을 잘라내는 substr을 까먹고 있었어서 split해서 하다가구현해서 그런거같다.

substr
문자열에서 특정 위치에서 시작하여 특정 문자 수 만큼의 문자들을 반환합니다.

무튼 한글자 씩늘려가면서 반복되는 패턴을 발견하면 그때 cnt를 앞에붙이가 뒤에 그 패턴을 추가한다.
그 다음 패턴을 추가했으니 그 길이만큼 +해서 그다음 문자부터 다시 시작한다.
( for(j)에서 j+=i 부분 )

📘 참고

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/substring
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/substr
https://sustainable-dev.tistory.com/153

profile
깃허브 : github.com/JuneHyung

0개의 댓글