프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *
으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
phone_number | return |
---|---|
"01033334444" | "*******4444" |
"027778888" | "*****8888" |
const solution = (phone_number) => {
const numberLength = phone_number.length;
const hide = phone_number.slice(0, numberLength-4)
return hide.replace(/[0-9]/g,"*") + phone_number.slice(numberLength-4,numberLength)
}
/*
내가 처음 작성한 코드인데 의식의 흐름대로 작성해서 리팩토링 해야된다..
1. 자주 사용하는 phone_number.length를 numberLength 변수에 할당해주었다.
2. hide라는 변수에 전화번호의 첫 번째 숫자부터 뒷 4자리를 제외한 숫자까지를 저장한다.
3. hide.replace(/[0-9]/g,"*")를 통해 hide에 저장된 숫자들을 '*'로 대체해준다.
g 플래그는 전역 검색을 의미한다. 즉, 문자열의 모든 위치에서 일치하는 패턴을 찾는다.
4. '*'로 대체된 숫자들과 원래 전화번호의 뒷 4자리를 합쳐서 반환한다.
*/
const solution = (phone_number) => phone_number.replace(/\d(?=\d{4})/g, "*");
/*
정규식과 replace만 사용하여 작성한 코드이다.
1. \d는 숫자를 나타낸다.
2. (?=\d{4})는 lookahead라는 정규표현식의 기능이다.
이는 현재 위치에서 앞쪽으로 4개의 숫자가 있는지 확인한다. 만약 있다면, 이는 패턴에 일치한다고 판단한다.
3. g 플래그는 전역 검색을 의미한다. 즉, 문자열의 모든 위치에서 일치하는 패턴을 찾는다.
따라서, 이 정규표현식은 "숫자 다음에 4개의 숫자가 있는 경우"를 찾아 이를 '*'로 대체한다.
*/
const solution = (phone_number) =>
"*".repeat(phone_number.length - 4) + phone_number.slice(-4);
/*
repeat와 slice만 사용하여 작성한 코드이다.
1. "*".repeat(phone_number.length - 4) 코드는''문자를 전화번호의 길이에서 4를 뺀 만큼 반복한다.
2. phone_number.slice(-4) 코드는 전화번호의 뒷 4자리를 추출한다.
slice(-4)는 문자열의 끝에서부터 4개의 문자를 추출하는 함수이다.
3. 이 두 부분을 '+' 연산자로 이어붙여 전체 전화번호를 구성한다.
전화번호의 앞부분은 '*'로 채워지고, 뒷부분은 원래의 4자리 숫자가 그대로 나타난다.
*/
const solution = phone_number =>
[...phone_number].fill("*",0,phone_number.length-4).join("")
/*
스프레드 연산자, fill, join을 사용하여 작성한 코드이다.
1. 스프레드 연산자를 사용하여 전화번호를 문자 배열로 변환한다.
2. fill("*", 0, phone_number.length - 4)는 배열의 처음부터 뒷 4자리를 제외한 부분까지를
'*'로 채운다. fill 함수는 첫 번째 인자로 주어진 값을 두 번째 인자에서 세 번째 인자까지의
인덱스 범위에 대해 채운다.
3. join("")는 배열의 모든 요소를 하나의 문자열로 합친다.
*/