문제 출처 : 프로그래머스 prorammers - 핸드폰 번호 가리기 (링크)
문제 설명
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
제한사항
- s는 길이 4 이상, 20이하인 문자열입니다.
A. 내가 푼 답
function solution(phone_number) {
var answer = phone_number.split("");
return new Array(answer.length)
.fill("*")
.splice(0, answer.length - 4)
.concat(answer.splice(answer.length - 4))
.join("");
}
뭔가 정규식을 사용해보고 싶은 문제였다.
function solution(phone_number) {
var answer = phone_number.split("");
var arrLength = answer.length;
var arr = new Array(arrLength)
.fill("*")
.splice(0, arrLength - 4)
.concat(answer.splice(arrLength - 4));
return arr.join("");
}
제출한 로직이 지저분해 보여서 자주 사용되는 값(answer.length)을 변수로 선언하기로 했다.
😎 문제와는 반대로 끝의 4자리만 *로 바꿔볼까?
function solution(phone_number) {
var answer = phone_number.split("");
answer.splice(-4, 4, "***");
return answer.join("");
}
solution("01033334444"); // '0103333***'
solution("027778888"); // '02777***'
B. 다른 사람이 푼 답
function solution(phone_number) {
var answer = "*".repeat(phone_number.length - 4) + phone_number.slice(-4);
return answer;
}
내가 생각했던 과정에서 크게 벗어나지 않는 식이 눈에 들어왔다.
"문자열 길이에서 4를 뺀만큼 '*'를 repeat으로 반복한 것 +문자열을 끝에서부터 4자리까지 slice로 자른 것"
문자열 > 배열 > 문자열로 수정됐던 나의 식과 다르게 위 식은 자료형 변화를 주지 않도 됐다.
String.prototype.slice()
Array.prototype.splice()
왠지 모를 허탈감과 신기함.
splice와 slice를 고쳐쓰길 반복하다가 써봤던 방식으로 풀었던 문제인데, 이젠 여태껏 '사용하지 않았던'메서드에 대한 사용도와 이해도도 높여야겠다.
+
사실 이 문제를 읽고 '정규식'으로 풀고 싶었다.
정규식은 이번 주 todo리스트에 넣어 꼭 공부해야겠다.
function hide_numbers(s) {
return s.replace(/\d(?=\d{4})/g, "*");
}
위 정규식을 간단한 해석해보기로 했다.
/\d(?=\d{4})/g
/ 정규식 / : 나는 정규식. 내가 정해주는 패턴을 가진 애들을 찾을 거야.
g : 근데 너네 전체에서 찾을 거야.
/\d(?=\d{4})/g
\d : 나는 숫자. [0-9]랑 같음
{n} : 나는 앞의 식이 n번 반복되는 모양 .
즉, \d{4} : 숫자가 4개 있는 모양.
/\d(?=\d{4})/g
x(?=y) : y뒤에 있는 x만 대응
즉, \d(?=\d{4}) : 뒤에 달아 숫자 4개가 있다면 그 앞(x)부분
'D.evelop [CS] > Algorithm' 카테고리의 다른 글
[Algorithm 024] JS - 평균 구하기 (Level 01) (0) | 2021.11.11 |
---|---|
[Algorithm 023] JS - 하샤드 수 (Level 01) (0) | 2021.11.10 |
[Algorithm 021] JS - 행렬의 덧셈 (Level 01) (0) | 2021.11.08 |
[Algorithm 020] JS - x만큼 간격이 있는 n개의 숫자 (Level 01) (0) | 2021.11.07 |
[Algorithm 019] JS - 직사각형 별찍기 (Level 01) (0) | 2021.11.05 |
댓글