[문자열 탐색][JS] 문자열 압축

Teasan·2022년 6월 30일
0

Algorythm

목록 보기
8/17
post-thumbnail

문자열 압축


문제 설명

알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는 문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하시오. 단 반복횟수가 1인 경우 생략합니다.

입력 설명

첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.

출력 설명

첫 줄에 압축된 문자열을 출력한다.

입출력 예제

▣ 입력예제 1

  • KKHSSSSSSSE

▣ 출력예제 1

  • K2HS7E

풀이(내가 시도한 문제)

function solution(str) {
  let answer = "";
  // 중복 숫자를 카운팅 해줄 변수 count를 생성. 1부터 카운팅.
  let count = 1;

  for (let i = 0; i < str.length; i++) {
    if (str[i] === str[i + 1]) {
      count++;
      answer += `${str[i]}${count}`;
    } else {
      count = 1;
      answer += str[i];
    }
  }
  return answer;
}

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

출력

  • K2KHS2S3S4S5S6S7SE

문제점

  • 중복된 문자가 제거되지 않고, count가 초기화되지 않는 문제가 있었다.

해답/풀이(강의)

function solution(str) {
  let answer = "";
  let count = 1;
  str = str + " ";

  for (let i = 0; i < str.length - 1; i++) {
    if (str[i] === str[i + 1]) {
      count++;
    } else {
      answer += str[i];
      if (count > 1) answer += String(count);
      count = 1;
    }
  }
  return answer;
}

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

출력

  • K2HS7E

수도 코드 포함

function solution(str) {
  // 0. 중복 숫자를 카운팅 해줄 변수 count를 생성. 1부터 카운팅.
  let answer = "";
  // 1. 마지막 요소의 +1 인덱스 비교를 위해 str 끝에 " " 띄어쓰기 문자열 추가
  let count = 1;
  str = str + " "; 

  // 2 for 반복문을 문자열 srt의 길이에 -1를 한만큼 돌아서 
  for (let i = 0; i < str.length - 1; i++) {
    // 2.1 띄어쓰기 " "를 처리해야 하기 때문에 str.length에 -1
    
    // 3. 만약, str[i]이 str[i + 1]과 똑같다면
    if (str[i] === str[i + 1]) {
      // 4. count를 더해준다.
      count++;
    } else { 
      // 5. 만약, str[i]이 str[i + 1]과 다르다면
      // 6. answer에 str[i] 값을 누적한다.
      answer += str[i]; 
      // 7. 만약 count가 1보다 크다면 answer에 count 숫자를 누적한다.
      if (count > 1) answer += String(count); // 7.1 문자열로 변환하여 answer에 누적
      // 8. count를 초기화 한다.
      count = 1; 
    }
  }
  // 9. 누적한 값을 담은 answer를 반환한다.
  return answer;
}

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

⚡️ Reference


✍🏻 자바스크립트 알고리즘 문제풀이 - 인프런

profile
일단 공부가 '적성'에 맞는 개발자. 근성있습니다.

0개의 댓글