코딩테스트/프로그래머스

[프로그래머스] 핸드폰 번호 가리기 (Level 1, JavaScript)

방혜진 2024. 10. 4. 00:14

❗️ 문제

출처: 프로그래머스 코딩 테스트 연습,

https://school.programmers.co.kr/learn/courses/30/lessons/12948

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때,
전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해 주세요.

 

 

❓ 나의 풀이

function solution(phone_number) {
  let frontNum = phone_number.slice(-0, -4);
  let backNum = phone_number.split(frontNum).join("");

  return frontNum.replaceAll(/./g, "*") + backNum;
}

slice, replaceAll 메서드를 사용해서 풀었다.

 

테스트 케이스

 

우선, 전화번호 뒷 4자리와 앞자리를 저장하는 변수를 만들었다.

앞자리는 뒷 4자리만 제외한 부분이니까, slice 메서드를 이용해서 뒤부터 4자리까지 잘라 frontNum 변수에 저장했고

뒷자리는 split 메서드를 사용해 phone_number 를 frontNum 을 기준으로 분리한 뒤, 다시 join 으로 합쳐 backNum 변수에 저장했다.

 

테스트 케이스를 예로 들면,

frontNum 은 "01033334444" 에서 뒷 4자리를 자른 "0103333" 이 된다. ➡️ frontNum = "0103333"

backNum 은 "01033334444" 를 frontNum 을 기준으로 즉, "0103333" 을 기준으로 나누어 ["", "4444"] 가 되고,

이걸 다시 join 으로 합치면 ➡️ backNum = "4444" 가 된다.

 

그다음 frontNum 의 모든 문자를 * 로 바꾸고 backNum 과 다시 합쳐주면 된다.

이를 위해 replaceAll 메서드를 사용했다.

정규 표현식 /./g 를 사용하여 frontNum 의 모든 문자를 * 로 대체했다.

그러면 frontNum  = "*******" 로 바뀌고 이걸 backNum 과 더하면 "*******4444" 가 된다. (문자열은 덧셈 가능!)

 

++) replaceAll

문자열에서 특정 패턴이나 문자를 찾아 다른 문자로 일괄 변경할 때 사용된다.

첫 번째 인자는 바꿀 대상(패턴이나 문자)를 의미하고, 두 번째 인자는 바꿀 문자를 의미한다.

 

++) /./g

. 은 문자 하나를 의미함.

/g 는 global 을 의미함.

즉, 문자열 내 모든 문자를 찾아서 특정 문자나 패턴으로 대체하겠다는 뜻 (여기서는 *로 대체)

 


💡 참고 문헌

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll

 

String.prototype.replaceAll() - JavaScript | MDN

replaceAll() 메서드는 pattern의 모든 일치 항목이 replacement로 대체된 새 문자열을 반환합니다. pattern은 문자열 또는 RegExp일 수 있으며 replacement는 각 일치 항목에 대해 호출되는 문자열 또는 함수일

developer.mozilla.org