Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript 문자열에서 n번째로 등장하는 문자를 제거하는 함수 구현하기

문제 개요

이번 글에서는 String.prototype 객체에 추가할 removeStr() 함수를 작성해 보겠습니다. 이 함수는 다음 세 가지 인자를 받습니다.

  • str: 대상이 되는 원본 문자열
  • char(subStr): 제거하고자 하는 문자 또는 부분 문자열
  • n(num): 몇 번째로 등장하는 항목을 제거할지 지정하는 숫자

즉, 이 함수는 문자열에서 n번째로 나타나는 특정 문자(또는 부분 문자열)를 찾아 제거한 새로운 문자열을 반환해야 합니다. 만약 해당 문자가 존재하지 않거나 n번째 등장 횟수가 없다면 -1을 반환하도록 처리합니다.

구현 코드

const str = 'aaaaaa';
const subStr = 'a';
const num = 6;

removeStr = function(subStr, num){
    if(!this.includes(subStr)){
        return -1;
    }
    let start = 0, end = subStr.length;
    let occurences = 0;
    for(; ;end < this.length){
        if(this.substring(start, end) === subStr){
            occurences++;
        };
        if(occurences === num){
            return this.substring(0, start) + this.substring(end, this.length);
        };
        end++;
        start++;
    }
    return -1;
}
String.prototype.removeStr = removeStr;
console.log(str.removeStr(subStr, num));

코드 동작 방식

코드의 흐름을 단계별로 살펴보면 다음과 같습니다.

  1. 존재 여부 확인: this.includes(subStr)를 통해 대상 문자가 문자열에 포함되어 있는지 먼저 검사합니다. 포함되어 있지 않으면 즉시 -1을 반환합니다.
  2. 슬라이딩 윈도우 방식 탐색: startend 두 인덱스를 사용해 부분 문자열 길이만큼의 범위를 한 칸씩 이동하며 비교합니다.
  3. 등장 횟수 카운트: 현재 범위의 부분 문자열이 subStr과 일치하면 occurences 값을 1씩 증가시킵니다.
  4. n번째 일치 시 제거: 등장 횟수가 목표 값 num에 도달하면, 해당 위치 앞부분(substring(0, start))과 뒷부분(substring(end))을 연결하여 새 문자열을 만들어 반환합니다.

여기서 핵심은 문자열을 직접 수정하지 않고, 잘라낸 두 조각을 이어 붙인 새로운 문자열을 생성한다는 점입니다. 자바스크립트의 문자열은 불변(immutable)하기 때문에 이러한 방식이 안전하고 관례에도 맞습니다.

실행 결과

위 예제에서는 문자열 'aaaaaa'에서 6번째로 등장하는 'a'를 제거하므로, 콘솔에는 아래와 같은 결과가 출력됩니다.

aaaaa

이처럼 removeStr() 함수를 활용하면 단순히 첫 번째나 마지막 항목이 아니라, 원하는 순번의 특정 문자만 정확하게 제거할 수 있습니다. 필요에 따라 -1 대신 원본 문자열을 그대로 반환하거나, 에러 메시지를 던지는 방식으로 응용할 수도 있습니다.