[Javascript] LV.1 핸드폰 번호 가리기

은비·2023년 11월 14일
1

Programmers_CodingTest

목록 보기
59/72
post-thumbnail

문제 설명

프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.

전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.

제한 조건

  • phone_number는 길이 4 이상, 20이하인 문자열입니다.

입출력 예

phone_numberreturn
"01033334444""*******4444"
"027778888""*****8888"

✍ SOLUTION1

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자리를 합쳐서 반환한다. 
*/

✍ SOLUTION2

const solution = (phone_number) => phone_number.replace(/\d(?=\d{4})/g, "*");

/*
정규식과 replace만 사용하여 작성한 코드이다. 

1. \d는 숫자를 나타낸다.
2. (?=\d{4})는 lookahead라는 정규표현식의 기능이다. 
이는 현재 위치에서 앞쪽으로 4개의 숫자가 있는지 확인한다. 만약 있다면, 이는 패턴에 일치한다고 판단한다.
3. g 플래그는 전역 검색을 의미한다. 즉, 문자열의 모든 위치에서 일치하는 패턴을 찾는다.
따라서, 이 정규표현식은 "숫자 다음에 4개의 숫자가 있는 경우"를 찾아 이를 '*'로 대체한다. 
*/

✍ SOLUTION3

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자리 숫자가 그대로 나타난다.
*/

✍ SOLUTION4

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("")는 배열의 모든 요소를 하나의 문자열로 합친다.
*/

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

0개의 댓글