본문 바로가기
Javascript/자바스크립트 문제

[Javascript : programmers] 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기 (Lv.0) (ft. IndexOf vs LastIndexOf) 💥

by isfp_yykkng 2024. 8. 20.

[Javascript : programmers] 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기 (Lv.0) (ft. IndexOf vs LastIndexOf) 💥

문제

 

나의 정답 풀이

function solution(myString, pat) {
    let arr = [];
    while(myString.length != 0){
        if(myString.endsWith(pat)) arr.push(myString);
        myString = myString.slice(0,myString.length-1);
    }
    return arr[0];
}

 

while문으로 myString 문자열을 뒤에서 하나씩 자르면서 pat로 끝나는 문자열들을 모두 새로운 배열 arr에 넣는다.

그 중 가장 pat로 끝나는 가장 긴 부분은 배열의 첫번째 원소이기 때문에 arr[0] 을 반환한다.

 

다른 사람 풀이를 보니 밑줄친 이 부분이 가장 큰 생각의 오점이라 생각이 든다.

pat로 끝나는 마지막 부분을 찾고 이 부분에 pat를 더하여 쉽게 풀 수 있는데...

 

다른 사람 풀이

const solution = (str, pat) => str.substring(0, str.lastIndexOf(pat)) + pat

 

이를 위해서 뒤에서부터 특정 문자의 인덱스를 찾는 lastIndexOf() 함수를 사용한다.

문자열 처음부터 pat가 있는 가장 마지막 인덱스까지 자르고 이 뒤에 pat를 더하여 반환한다.

 

학습 내용 ⭐

  • String.indexOf( 찾을 문자열, 시작 위치 ) : 앞에서부터 문자열이 있는 첫 인덱스 반환
  • String.lastIndexOf( 찾을 문자열, 시작 위치 ) : 뒤에서부터 문자열이 있는 첫 인덱스 반환

두 함수 모두 시작 위치를 생략하면 기본값 0 으로 들어가고 찾는 문자열이 없다면 -1을 반환한다.

 

즉, 차이점은 indexOf() 함수는 0부터 양수인덱스로 커지며 앞에서부터 뒤로 찾고, lastIndexOf() 함수는 0부터 음수 인덱스로 작아지며 뒤에서부터 앞으로 찾는다. ⭐