Programmers - 문자열 압축

Doodream·2021년 3월 17일
0

코딩테스트

목록 보기
2/22
post-thumbnail

💻 문자열 압축


❓ 문제

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

✔️ 코드

function solution(s) {
  let compressedStringLengthArr = [];

  // i는 압축문자 단위가 s길이의 절반을 넘을수 없으므로 그만큼 반복한다.
  for (let i = 0; i < s.length / 2; i++) {
    let compressedStringLength = i + 1;
    let repeatStringCount = 1;
    let newString = "";

    // j는 압축문자가 다음문자와 같은지 s에 대해서 전부 비교해 나가본다.
    for (let j = 0; j < s.length; j += compressedStringLength) {
      let currentString = s.substring(j, j + compressedStringLength);
      let nextString = s.substring(
        j + compressedStringLength,
        j + 2 * compressedStringLength
      );

      //현재문자와 다음문자가 같다면 반복횟수 증가
      if (currentString === nextString) {
        repeatStringCount += 1;
        // 같지 않다면 더이상 반복이 안되는 것이므로 새로운 문자열에 반복횟숫를 넣어서 반복문자열을 넣는다.
      } else {
        if (repeatStringCount !== 1) {
          newString = newString + repeatStringCount + currentString;
          // 반복이 안된다면 현재 문자열이 나머지 문자열이 되므로 기존 문자열에 붙여 넣는 것이다.
        } else {
          newString = newString + currentString;
        }
        //반복 횟수 초기화
        repeatStringCount = 1;
      }
    }
    // 압축완료된 문자열 케이스 길이 하나 추가
    compressedStringLengthArr.push(newString.length);
  }

  var answer = Math.min(...compressedStringLengthArr);
  return answer;
}

console.log(solution("aabbaccc"));

❗️풀이과정

압축 압축문자열 단위를 한문자씩 앞에서부터 훑어가면서 s길이의 절반(아무리 반복되더라도 절반 이상이 반복될수는 없기때문에)까지 늘리면서 압축된 문자열을 모은다음 가장 짧은 길이의 문자열의 길이를 구하자

  1. 압축할 문자열의 단위를 1부터 시작한다.
  2. 압축반복되는 문자열을 결정하고 다음 비교할 문자열과 같은지 비교한다.
  3. 압축문자열의 비교를 반복이 끝날때까지 하고 반복이 끝나면 반복한 횟수를 압축문자열의 앞에 넣는다. (반복이 되는것이 확인될때마다 새로 넣어준다)
  4. 2-3을 반복하며 압축문자열의 길이가 1인 것의 경우를 모두 돌아서 한자리수 반복하는 경우를 압축해서 압축문자열 길이의 경우의 수에 추가한다.
  5. 1-4를 반복하면서 압축길이가 1인것 부터 s길이의 절반까지 반복되는 것을 확인한다.

📄 배운점

  • spread 문법을 활용해서 배열의 요소들을 열거 한다.
  • Math.min() 괄호 안의 요소들중 가장 작은 요소를 반환한다.
  • array.substring(a, b) array의 a번째 요소부터 b까지의 요소를 잘라내서 개별적인 배열을 만든다.
profile
일상을 기록하는 삶을 사는 개발자 ✒️ #front_end 💻

0개의 댓글