코딩테스트

[코딩테스트] 핸드폰 번호 가리기

이경욱 2023. 12. 7. 21:40

문제

프로그래머스 모바일은

개인정보 보호를 위해 고지서를 보낼 때

고객들의 전화번호의 일부를 가립니다.

 

전화번호가 문자열 phone_number로 주어졌을 때,

전화번호의 뒷 4자리를 제외한

나머지 숫자를 전부 *으로 가린 문자열을 

리턴하는 함수, solution을 완성해주세요.

 

해결

function solution (phone_number) {
    return phone_number
    .slice(0, -4)
    .replace(/[0-9]/g,"*")
    + phone_number
    .substring(phone_number.length - 4)
}

slice로 뒤 4번째 인덱스 전까지 문자열을 자른다.

replace로 숫자를 모두 *로 치환한다.

그리고 substring으로 length - 4를 하면 뒤의 4자리만 추출된다.

이를 더해주면 답이 나왔다.

 

 

 

 

 

다른 사람의 풀이

const solution2 = n => [...n].fill("*",0,n.length-4).join("")

 

숫자를 [...n] spread operator로 배열 변환한 뒤

fill 메서드를 통해 0부터 length의 -4 까지 * 로 채워주고

join으로 다시 문자열로 합쳐주면 답이 나오는 방식을 사용했다.

 

 

function solution3(s){
    var result = "*".repeat(s.length - 4) + s.slice(-4);
    return result;
}

 

repeat 메서드를 통해 length -4 까지 *을 반복하고,

slice로 뒤에서 4번째 인덱스만 추출해 더해주었다.

 

 

function solution4(s){
    return s.replace(/\d(?=\d{4})/g, "*");
}

 

(1) (?='') : 특정 문자 앞까지 조회

(2) {} : 숫자로 단위를 표현하여 선택

(3) \d : 숫자를 의미

 

위 정규식을 풀어보면

'\d 숫자에서 (?=\d{4}) 숫자 4자리 전까지 /g 전체 범위를 *로 바꿔라'

라고 명시한 것 같다.

 

정규식 표현도 공부해야겠다.