새소식

프론트엔드 공부/자료구조 & 알고리즘

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

  • -

compressString

문제

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

입력

인자 1 : str

  • string 타입의 알파벳 문자열

출력

  • string 타입을 리턴해야 합니다.

주의 사항

  • 빈 문자열을 입력받은 경우, 빈 문자열을 리턴해야 합니다.
  • 3개 이상 연속되는 문자만 압축합니다.

입출력 예시

let output = compressString('abc'); console.log(output); // --> abc output = compressString('wwwggoppopppp'); console.log(output); // --> 3wggoppo4p

코드

// 작성코드 function compressString(str) { // count 변수를 1로 설정 let count = 1; // 새로운 문자열을 저장할 변수 let newStr = ''; // str의 길이만큼 반복 for (let i = 0; i < str.length; i++) { // 현재 문자와 다음 문자가 같으면 if (str[i] === str[i + 1]) { // count를 증가 count++; } else { // count가 3 이상이면 if (count >= 3) { // count와 현재 문자를 새로운 문자열에 추가 newStr += count + str[i]; } else { // count가 3 미만이면, str의 i-count+1부터 i까지의 문자열을 새로운 문자열에 추가 // substring(x, y) 메소드는 string 객체의 시작 인덱스(x)로 부터 종료 인덱스(y) 전 까지 문자열의 부분 문자열을 반환 newStr += str.substring(i - count + 1, i + 1); } // count를 1로 초기화 count = 1; } } // 새로운 문자열을 반환 return newStr; } // 레퍼런스 function compressString(str) { // 연속되는 문자를 기록하기 위한 변수 // 첫 번째 문자로 초기화 let before = str[0]; // 동일한 문자의 반복 횟수 let count = 1; // 정답으로 리턴할 문자열 let result = ''; // 마지막 부분이 연속된 문자일 경우를 위해 dummy 문자 추가 str = str + ' '; for (let i = 1; i < str.length; i++) { // 동일한 문자가 반복될 경우 if (before === str[i]) { count++; } else { // 이전과 다른 문자일 경우, // 반복된 횟수가 3 이상일 경우에만 압축을 한다. if (count >= 3) { result = result + `${count}${before}`; } else { result = result + before.repeat(count); } before = str[i]; count = 1; } } return result; }
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.