문자열 myString과 pat이 주어집니다. myString에서 pat이 등장하는 횟수를 return 하는 solution 함수를 완성해 주세요.
1 ≤ myString ≤ 1000
1 ≤ pat ≤ 10
myString | pat | result |
---|---|---|
"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 result = 0;
for(let i = 0; i < myString.length; i++){
let str = myString.slice(i, pat.length + i)
if(str === pat){
result += 1
}
}
return result;
}
확실히 비슷한 문제들을 풀고 풀어보니 어떤 방식으로 하면 문제가 풀릴지 보였다.
pat이 myString에 단어가 몇개 있는지 횟수를 반환하는데
이번 문제에서 중요한 점은 중복되어 확인해야하는 점이였다.
이때 pat의 길이 만큼 문자열을 잘라서 확인하면 되겠구나 싶었다.
for문을 통해 myString을 순환하고
myString을 slice를 통해 pat의 길이 만큼 잘라준다.
만약 해당 문자열(str)이 pat과 동일하다면 result에 1 더해줬다.
function solution(myString, pat) {
let count = 0;
for(let i = 0; i < myString.length; i++){
if(myString.slice(i, pat.length + i) === pat) count += 1
}
return count;
}
str
이라는 불필요한 변수를 굳이 만들지 않고 바로 조건문에 대입 시켰다.
let str = myString.slice(i, pat.length + i)
또한 if문은 내용이 한줄만 있을 경우 {}
중괄호를 생략해서 작성할 수 있다.
result에서 count로 변수명을 변경한 이유는
다른 사람이 작성하신 코드를 봤을 때 count라는 변수를 반환하셨다.
현재 문제에서는 결과 값 보다는 횟수를 반환해야하기 때문에
직관적인 count라는 변수명이 맞다 생각해 수정했다.
function solution(myString, pat) {
const reg = new RegExp(`(?=${pat})`, "g")
return myString.match(reg)?.length || 0;
}
다른 분들은 나와 비슷한 방식으로 코드를 작성하셨다.
정규식 표현으로 코드를 작성하신 것 같다... 공부할게 많다..ㅎ