JavaScript/알고리즘

프로그래머스 접미사인지 확인하기 JS ( endsWith() / slice()와 length차 이용하기 )

hihiha2 2023. 6. 8. 01:21
반응형

프로그래머스 접미사인지 확인하기 JS

문제 설명

어떤 문자열에 대해서 접미사는 특정 인덱스부터 시작하는 문자열을 의미합니다. 예를 들어, "banana"의 모든 접미사는 "banana", "anana", "nana", "ana", "na", "a"입니다.
문자열 my_string과 is_suffix가 주어질 때, is_suffix가 my_string의 접미사라면 1을, 아니면 0을 return 하는 solution 함수를 작성해 주세요.

 

 

 

✅ 내 코드

function solution(my_string, is_suffix) {
    return +my_string.endsWith(is_suffix)
}

이 문제는 정말 빨리 풀었다. 전에 다른 문제를 풀면서 startsWith()와 endsWith()를 다뤄본적이 있어서 문제를 읽자마자 바로 endsWith()를 사용해서 풀어야겠다는 생각이 들었다. 

endsWith()는 특정문자열로 어떤 string이 특정문자열로 끝나는지를 검사해서 그 값을 Boolean값으로 반환한다. 

그래서 my_string이 is_suffix로 끝나는지 endsWith()를 사용해서 검사하고, 그 값은 true나 false로 나오기 때문에 이것을 다시 숫자로 바꿔주기 위해서 +를 해준다.

 

 

 

 

💻  다른사람 코드중에 배울 것 

function solution(my_string, is_suffix) {
    return my_string.slice(my_string.length - is_suffix.length) === is_suffix ? 1 : 0
}

문자열의 길이차를 이용해서 푼 풀이가 흥미로워서 공부했다.

slice()는 string이나 array를 자를때 사용하는데 인자를 하나만 넣으면 start지점을 뜻한다. 

my_string의 길이 - is_suffix의 길이 = slice의 start지점

(앞에서 몇번째부터 자를것인지를 length의 차이로 구해서 slice의 start지점으로 한다.)

banana와 ana를 예시로 하면 6-3 =3 이므로 slice의 start지점은 3번째인덱스가 될것이다. 인덱스는 0부터 있으므로 3번째 인덱스는 4번째에 있는 a가 되고 여기서 부터 자르면 ana이다.

 

그리고 그렇게 구한 값이 is_suffixd와 같은 값인지 비교한뒤, 삼항연산자를 사용하여 맞으면 1, 아니면 0을 반환한다.

 

 

💻 메서드

endsWith():  어떤 문자열에서 특정 문자열로 끝나는지를 확인할 수 있으며, 그 결과를 true 혹은 false로 반환

<=> startsWith()

 

 

slice(): 문자열의 일부를 추출하면서 새로운 문자열을 반환  어디부터 어디까지 잘라주지?

string.slice()

array.slice()

 

✔️ string과 array모두에 사용가능

✔️ 새로운 문자열을 반환한다는 점이 유사한 기능을 하는 splice()와 큰 차이점 (splice()은 원본변경)

 

✔️  인자가 2개오면 start, end지점 (end 미포함)

str.slice(beginIndex[, endIndex])

end는 미포함하므로 주의해야한다.

 

 

 

🙋‍♀️ 내생각

알고리즘을 풀면서 자바스크립트의 다양한 기능을 하는 메서드들을 익히고, 또 그걸 잘 활용할 수 있도록 익숙해지고 있는 것 같아서 좋다. 

 

slice()도 정말 자주 사용하는 메서드중에 하나인데 중요한 특징들이 눈에 보여서 이번에 문제를 풀면서 또 정리해보았다. slice()는 처음 사용할때는 자꾸 end미포함을 까먹었어서 특별히 표시해두었다. 그리고 slice()를 한마디로 정의하는 말이 생각이 났는데 "어디부터 어디까지 자를까"였다 ㅋㅋ 그래서 적어놓았다. 이름처럼 "자른다"의 역할을 할 것은 충분히 예상가능하지만 어디부터 어디까지 자르는 것인지를 정할 수 있다는게 제일 중요한 특징인것같아서 잊어버리지 않도록 하려고 한다. (필요하면 찾아본다고 하더라도 slice()는 워낙 자주쓰는거니까 저정도는 외워둬야하지 않을까 ㅎㅎ)

 

 

반응형