일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- indexOf
- 노드제이에스
- TypeScript
- error
- codingtest
- Javascript
- node
- 코딩테스트연습
- 에러
- npm
- 코딩테스트
- 노드
- Method
- nodejs
- Nextjs
- 마음커넥션
- react
- Array
- Programmers
- 프로그래머스
- 자바스크립트
- Reduce
- angular
- CLI
- 백엔드
- 앵귤러
- 타입스크립트
- 노드js
- slice
- 개발
- Today
- Total
Suzie's Blog
[프로그래머스] 문자열이 몇 번 등장하는지 세기(JavaScript) 본문
문제 설명
문자열 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
}
'개발 > 코딩테스트' 카테고리의 다른 글
[프로그래머스] 세 개의 구분자 (JavaScript) (2) | 2023.11.24 |
---|---|
[프로그래머스]특정 문자열로 끝나는 가장 긴 부분 문자열 찾기(JavaScript) (feat. lastIndexOf) (0) | 2023.11.21 |
[프로그래머스] 문자열 뒤집기(JavaScript) (0) | 2023.11.09 |
[프로그래머스] 수열과 구간 쿼리1 (JavaScript) (0) | 2023.10.25 |
[프로그래머스] 등차수열의 특정한 항만 더하기 (JavaScript) (0) | 2023.10.24 |