Algorithm/프로그래머스

[프로그래머스 js] 핸드폰 번호 가리기

양원준 2023. 10. 30. 15:28
728x90

문제설명

 

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

 

 

 

 

 

제한사항

 

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

 

 

 

 

 

 

입출력 예

 

phone_number return
"01023234444" "*******4444"
"02774233" "****4233"

 

 

 

 

 

 

 

나의 답

 

function solution(phone_number) {

    var answer = phone_number.split('')

    for(var i =0; i<phone_number.length-4; i++){
        answer[i] = '*'
    }

    return answer.join('');
}

사실 보자 마자 splice와 map 을 이용해서 풀면 되겠다.,.! 라고 생각하며 풀었지만 조금 뭔가 안풀려 급하게 방식을 바꿨던,,

 

  • split으로 phone_number를 배열에 담고
  • 반복문을 이용해 끝에 4자리까지 반복하여 *를 직접 집어넣은 뒤에
  • join으로 string으로 합친다

 

 

 

 

 

 


다른 사람 풀이

 

사실 이게 내가 풀려하던 방법이었다

 

function solution(phone_number) {
    
    return [...phone_number].map((a, i) => i < phone_number.length-4 ? "*" : a).join("")
}

 

  • 스프레드연산자로 phone_number를 배열에 넣어주고
  • map을 이용하여 전체길이-4 보다 작을때까지 인덱스에 *을 넣어준뒤
  • join으로 합친다

 

음 코드를 보니 순간 왜 헤맸지,,? 스프레드나 map 을 다시 파헤쳐 봐야될듯하다

 

 

 

 

 

 

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

 

간단하게 정규식으로 푼 풀이도 있었다

하지만, 이는 좀 시간이 오래걸리는듯?

 

 

 

 

 

 

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

repeat가 slice를 이용한 풀이 방법이다

이도 굉장히 직관적인 풀이인듯 하다

 

  • repeat을 이용해 뒷4자리를 제외한 phone_number의 수만큼 *을 생성하고
  • slice로 뒷4자리를 떼어내어 위와 붙혀 반환한다

 

 

 

 

 

728x90