:ledger: 문제 설명

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

:one: 제한사항

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

:two: 입출력 예

phone_number return
“01033334444” ***4444”
“027778888” “*****8888”

:ledger: 문제 풀이

const solution = phone_number => {
    let str = '';
    for(let i = 0; i < phone_number.length; i++){
        i < phone_number.length - 4
        ? str += "*" 
        : str += phone_number[i]
    }
    return str;
}

:one: 함수 선언

  • 화살표 함수를 사용하여 phone_number를 매개변수로 받는다.

:two: 풀이

  • 문자열을 담아줄 변수 str을 선언한다.
  • for문을 사용하여 phone_number의 길이만큼 순회함
  • 뒤의 4자리를 가려주기 위해 phone_number의 길이 - 4를 해줌
  • 4자리 이전까지는 '*'을 문자열에 담아주고
  • 4자리 부터는 기존 폰 번호를 담아줌

:three: 결과 반환

  • phone_number = 01033334444 대입하면 뒤의 4자리 4444를 제외하고 ***4444가 출력된다.
  • phone_number = 027778888 대입하면 뒤의 4자리 8888을 제외하고 *****8888가 출력된다.

:four: 실행

  • solution("01033334444") 실행하면 ***4444 츨력
  • solution("027778888") 실행하면 *****8888 츨력

:fire: 다른 사람의 풀이 참고

나름 정석으로 풀었다 생각을 했지만 생각보다 for문을 사용한 풀이가 많지는 않았다. 정규식을 사용한 방법과 repeat, slice를 사용한 문제 풀이가 있었는데 한줄 코드로는 fill메서드를 사용한 풀이가 돋보였다.

// [27명] 정규식을 사용한 문제 풀이
function hide_numbers(s){
  return s.replace(/\d(?=\d{4})/g, "*");
}

// [3명] repeat, slice 사용한 문제 풀이
function hide_numbers(s){
  var result = "*".repeat(s.length - 4) + s.slice(-4);
  return result;
}

// [1명] fill 메서드를 사용한 문제 풀이
const solution = n => [...n].fill("*",0,n.length-4).join("")

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges