문자열 myString과 pat이 주어집니다. myString에서 pat이 등장하는 횟수를 return 하는 solution 함수를 완성해 주세요.
제한사항
function solution(myString, pat) {
return [...myString].reduce((acc, cur, idx) => {
let str = myString.slice(idx, pat.length+idx);
if(str === pat) return acc + 1;
return acc;
}, 0)
}
function solution(myString, pat) {
const reg = new RegExp(`(?=${pat})`, "g")
return myString.match(reg)?.length || 0;
}
pat
를 포함하는 정규 표현식 객체를 생성한다. (?=${pat})
는 긍정형 전방 탐색(lookahead)을 사용하여 문자열 내에서 pat이 시작되는 위치를 찾는다."g"
플래그는 전역 검색을 의미한다. ?.
- 옵셔널 체이닝 연산자, match 결과가 null일 경우 undefined를 반환한다. function solution(myString, pat) {
let count = 0;
for (let i = 0; i <= myString.length - pat.length; i++) {
if (myString.slice(i, i + pat.length) === pat) {
count++;
}
}
return count;
}
내 풀이를 reduce 대신 for로 슨 거나 마찬가지임.
1. 패턴이 등장하는 횟수를 저장할 count
를 0으로 초기화한다.
2. i를 0부터 myString.length - pat.length
까지 순회한다.
3. 현재 위치 i에서 pat.length
만큼 부분 문자열을 슬라이스하여 pat과 비교한다.
4. 일치하면 count를 1씩 증가시켜 최종 count를 반환한다.
const solution=(s,p)=>Array(s.length-p.length+1).fill('').map((v,i)=>s.slice(i,i+p.length)).filter(v=>v==p).length;
Array(s.length - p.length + 1).fill('')