24. 05. 21 TIL

더보기
더보기

,,, 도약반 문제 맞아요?

오늘은 리액트 강의를 복습하려고 좀 듣고, 알고리즘 도약반 문제를 풀었는데... 꽤 시간도 많이 잡아먹고 어려웠다.

 

따로 카테고리를 분류해두긴 했는데 시간이 없어 꾸준히 차례대로 올리지도 못했고, 오늘은 강의 듣고 도약반 문제 푼 게 다라서 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