Suzie's Blog

[프로그래머스] 문자열이 몇 번 등장하는지 세기(JavaScript) 본문

개발/코딩테스트

[프로그래머스] 문자열이 몇 번 등장하는지 세기(JavaScript)

Iuna 2023. 11. 17. 11:05
반응형
SMALL
문제 설명
문자열 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 합니다.

 

이번에도 방법이 전혀 떠오르지를 않아서 chatGPT에게 도움을 요청했고... 대신 답을 분석해보려 한다 ㅋㅋ

일단 아래와 같이 count와 index 변수를 선언해준다

let count = 0;
let index = myString.indexOf(pat)

 

indexOf는 몇번째 배열 또는 스트링에 해당 글자가 있는지 찾아준다. (시작하는 글자의 position)
( MDN 참고 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf )

예를들어 myString이 "banana" 그리고 pat이 "ana"일 때, 

myString.indexOf(pat)의 결과값은 1이된다.

 

그다음 while 반복문을 돌려주어 pat이 몇번 포함되어 있는지를 카운트한다

while (index !== -1) {
    count++
    index = myString.indexOf(pat, index+1)
}

 

반복문의 조건은 index가 -1이 아닌 이상 계속 반복하기!

index가 -1이 나온다는 말은 더이상 pat이 myString에 존재하지 않을 때이다.

 

반복문이 한번 돌 때, count++가 작동하면서 1씩 더해진다.

첫번째로 반복문이 실행되는 상황을 보면,

 

count ++ 

count에 1이 더해짐 ( count = 1)

index는 "banana"indexOf("ana", 1+1)

2번째 index에서부터 ana가 있는지 찾음 

b a n a n a
0 1 2 3 4 5

인덱스가 2번째인 글자부터 보면 "nana"이고 이 안에 "ana"가 들어있음.

ana의 시작 인덱스로 index는 3이된다.

그러므로 다음 반복문으로 넘어간다.

 

count ++

또 1이 count에 더해지고 (count = 2)

index는 "banana"indexOf("ana", 3+1)

na에는 ana를 찾을 수 없다 

그러므로 index 는 -1이 되고 반복문이 더이상 돌지 않는다.

 

최종적으로 count 는 2가 나온다.

 

이렇게 하나하나 정리하고 분석해보니 이제서야 이해가 간다

어쨋든.. 최종 정답은

function solution(myString, pat) {
    let count = 0;
    let index = myString.indexOf(pat)
    
    while(index !== -1) {
        count++
        index = myString.indexOf(pat, index+1)
    }
    return count
}

 

 

반응형
LIST