본문 바로가기
D.evelop [CS]/Algorithm

[Algorithm 022] JS - 핸드폰 번호 가리기 (Level 01)

by Danne 2021. 11. 9.

문제 출처 : 프로그래머스 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)부분

 

 

반응형

댓글