TIL) 프로그래머스 JS 핸드폰 번호 가리기

이명진·2021년 11월 20일
0

코드카타

목록 보기
2/69
post-thumbnail

프로그래머스를 다시 레벨 1단계부터 다시 풀어보도록 할 예정이다.

계기

원래 알고리즘 이런 것에는 프론트엔드이기 때문에 관심도 없었는데
일을 하면서 리팩토링을 진행할때 코드를 더 간단하고 성능을 좋게하기 위해서는
알고리즘에 대한 지식도 필요하다는 것을 알게 되었다.
틈틈히 알고리즘을 풀 생각이다.

프로그래머스를 둘러봤을때 레벨 1중에서 배열말고 string을 컨트롤 할수 있는 것을 우선적으로 풀어보도록 마음을 먹었다. 그래서 처음 선택하게된 핸드폰 번호 가리기 문제 아래는 내가 풀어본 내용과 답변이다.

프로그래머스 핸드폰 번호 가리기 js 문제

뒷자리 빼고 나머지 번호를 *으로 가리는 것이다.

처음 진행했을때 뒷 4자리 분리 후 나머지는 * 변환후 붙여 주면 되겠다 라고 생각하게 되었다. 🧑🏼‍💻

그래서 이런 코드가 나왔다.

🧐 처음 짠 코드

function solution(phone_number) {
let lastNum= phone_number.substr(-4)
let sliceNum = phone_number.slice(0,phone_number.indexOf(lastNum))
let changeNum = sliceNum.replace(/[0-9]/g,'*')
return changeNum+lastNum}

이유

정규식을 이용했다.
처음 뒷자리 4자리를 저장하고
4자리를 뺀 나머지 숫자를 저장하고
나머지 숫자를 정규식을 활용해 *으로 변환해 뒷자리 4자리와 합쳐주는 방법으로 로직을 작성하였다.

채점 결과 10문제중 1개만 맞고 나머지는 다 틀렸다
왜 틀린건지 아직도 이해할수 없지만 몇번 더 생각해 보다가
다른 사람의 풀이를 보게 되었다.

그리고

👾 찾은 답변

function solution(phone_number) {
let lastNum= phone_number.substr(-4)
let changeNum = '*'.repeat(phone_number.length-4)
return changeNum+lastNum
}

이 코드를 짜게 되었다 답을 보고 짠거지만 생각보다 훨씬 쉽고 간단하게
로직을 작성할수 있었다는 것에 놀라웠다.
아직 많은 내장함수를 모르고 있었기에 이렇게 짤수 없겠지 라고 생각하고
더 열심히 공부하자 하고 다짐하게 되었다.

다른 사람들의 풀이에서는 substr 대신에 slice를 사용하였다.

substr 보다 왜 slice를 사용하였는지 궁금었는데 마침 친절하신 댓글에
그에 대한 해답이 적혀있었다. 댓글쓰신분은 궁금하고 바로 해결을 위해 실천하시는 대단하신 분이었다. 그의 댓글을 발췌해서 해답을 작성해둔다

🎃TIL

발췌한 댓글!

찾아보니까 substr은 옛날 함수라 쓰지말라고하고, substring 하고 slice가 남아있는데 slice 가 '음수' 지원 (위의 답처럼)이 되므로 slice를 쓰는 것을 추천한다는 글이 있네요. 다른 분들께 도움이 되시라고 적어놓습니다~ 슬라이스씁시다!

substr을 썼었는데 옛날 함수가 되어있었다. ㅋ

substr, substring ,slice 를 다시 한번 찾아 보게 되었다
그리고 repeat 함수도 다시 상기하게 되었다.

substring()

string 객체의 시작인덱스로부터 종료 인덱스 전까지 문자열의 부분 문자열을 반환합니다

매개 변수로 시작인덱스 , 종료 인덱스 를 받을수 있다
만약 시작인덱스만 있고 종료 인덱스가 적혀있지 않다면 시작인덱스 부터 끝까지 다 나온다

substr

substr 은 시작 인덱스와 길이를 매개변수로 받는다.
시작 인덱스부터 시작하여 길이 만큼 문자를 뱉는다
시작 인덱스에 음수를 넣으면 뒤에서부터 인덱스를 센다
마찬가지로 길이를 넣지 않으면 끝까지 다 뱉는다

MDN에서 ' 행동은 하나 이상의 바람직하지 않은 특징을 갖고 있으며 ' 라고 하는데
어떤 바람직하지 않은 특징을 가지고 있는지는 잘 모르겠다

slice()

substring과 비슷하다. 음수를 사용할수 있다는 차이점이 있다

repeat()

반복하고자하는수.repeat(횟수)
형식으로 사용한다.
반복하고자 하는 수는 string 값이며 반복하고자 하는 문자가 횟수만큼 반복된다.

다시 한번 정리하고 오늘의 TIL을 마친다!

profile
프론트엔드 개발자 초보에서 고수까지!

0개의 댓글