오늘은 리액트 강의를 복습하려고 좀 듣고, 알고리즘 도약반 문제를 풀었는데... 꽤 시간도 많이 잡아먹고 어려웠다.
따로 카테고리를 분류해두긴 했는데 시간이 없어 꾸준히 차례대로 올리지도 못했고, 오늘은 강의 듣고 도약반 문제 푼 게 다라서 TIL에 알고리즘 문제를 작성한다.
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/181871
문자열 myString과 pat이 주어집니다.
myString에서 pat이 등장하는 횟수를 return 하는 solution 함수를 완성해 주세요.
입출력 예 #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 count = 0, index = 0;
while ((index = myString.indexOf(pat, index)) !== -1) {
count++;
index++;
}
return count;
}
슬랙 댓글창에서 다른 분들이 짠 코드를 봤는데 일단 긴 코드가 많고, 다양한 메소드를 사용해서 푸셔서 이해가 잘 가지 않아서 지피티 + 타 블로그를 참고해 코드를 짰다.
그런데도 이해가 잘 가지 않아서 한참을 고생했다.
코드를 설명하자면 먼저 count, index 변수를 값을 0으로 해서 만든다.
이 count는 pat이 등장하는 횟수를 리턴해준다.
index는 위치다.
무슨 위치냐 하면, indexOf는 문자열의 위치를 알려주는데
두번째 파라미터는 검색을 시작할 인덱스를 넣어줄 수 있다.
그리고 주어진 요소를 찾을 수 없으면 -1을 반환한다.
다음엔 while을 사용해 index로, myString을 돌면서 pat을 찾는다.
조건은 -1이 아닐 때 반복을 하라는 것 (찾을 수 있을 때)
그리고 찾으면 count와 index에 1씩 더했다.
1이 증가된 index는 다음 위치에서 또 pat을 찾는다.
이런식으로 돌고, 끝나면 결과 count를 리턴한다.
(근데 사실 이래도 조금 어렵긴 한데)
어쨌든 여기서 마무리... 끝.
'코딩테스트' 카테고리의 다른 글
24. 05. 09 TIL (0) | 2024.05.09 |
---|---|
두 수의 나눗셈 (0) | 2024.05.08 |
몫 구하기 (0) | 2024.05.07 |
24. 04. 30 알고리즘 코드카타 (0) | 2024.04.30 |
입문 - 두 수의 차 / 2 (0) | 2024.04.29 |