Backdrop

프로그래머스 ▸ 코딩 기초 트레이닝

문자열이 몇 번 등장하는지 세기
0

문제 설명

문자열 myStringpat이 주어집니다. myString에서 pat이 등장하는 횟수를 return 하는 solution 함수를 완성해 주세요.

제한사항

  • 1 ≤ myString ≤ 1000
  • 1 ≤ pat ≤ 10

입출력 예

myStringpatresult
"banana""ana"2
"aaaa""aa"3

입출력 예 설명

입출력 예 #1

  • "banana"에서 1 ~ 3번 인덱스에서 한 번, 3 ~ 5번 인덱스에서 또 한 번 "ana"가 등장해서 총 두 번 등장합니다. 따라서 2를 return 합니다.

입출력 예 #2

  • "aaaa"에서 0 ~ 2번 인덱스에서 한 번, 1 ~ 3번 인덱스에서 한 번, 2 ~ 4번 인덱스에서 한 번 "aa"가 등장해서 총 세 번 등장합니다. 따라서 3을 return 합니다.

풀이

이론

반복문을 이용해서 다음과 같이 풀 수 있어요.

function solution(myString, pat) {
  let answer = 0;
  for (let i = 0; i <= myString.length - pat.length; i++) {
    if (myString.slice(i).startsWith(pat)) {
      answer++;
    }
  }
 
  return answer;
}

이를 정규식으로 풀 수 있어요.

function solution(myString, pat) {
  return myString.match(new RegExp(`(?=${pat})`, 'g'))?.length || 0;
}

여기서 (?=)는 전방 탐색이라는 정규식 문법이에요. 전방 탐색은 pat이라는 패턴이 나오기 전까지만 탐색을 하겠다는 의미에요. 이렇게 쓰지 않으면 pat이라는 패턴 이후부터 탐색을 하기 때문에, pat이 중복되는 경우를 제대로 찾을 수 없어요.

코드

function solution(myString, pat) {
  return myString.match(new RegExp(`(?=${pat})`, 'g'))?.length || 0;
}