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

개발잘하기프로젝트·2020년 11월 23일
0
post-thumbnail

🤔 문제

프로그래머스 - 핸드폰 번호 가리기

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

❗️ 제한

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

💡 접근

solution 1은 주어진 문자열 phoneNumber를 배열로 만들어 주고 각 요소를 순회하면서 인덱스 iarr.length - 4보다 크거나 같으면 value값 그대로 리턴하고 나머지는 *로 리턴했다.

solution 2는 새로운 메서드 padStart()를 알게 되어 적용한 코드다. 먼저 const last4Digits = phoneNumber.slice(-4);로 마지막 4자리 전화번호를 잘라내고, last4Digits에 대해서 padStart()메서드를 적용해주면 답을 쉽게 구할 수 있다. 이와 비슷한 메서드로 padEnd()가 있다. 자세한 내용은 참고사항에 MDN 링크를 걸어두었다.

solution 3solution 2를 작성하던 중에 또 다른 풀이가 생각이 나서 적용해보았다. repeat() 메서드를 이용한 풀이 방법이다. solution 2와 마찬가지로 마지막 4자리 전화번호를 잘라내고 그 앞에 *전체 전화번호 길이 - 4 만큼 반복한 후 리턴했다.

solution 4는 문제와 다르게 앞의 4자리를 제외한 나머지 번호를 *로 바꾸는 문제로 풀어보았다. padEnd() 메서드를 이용해 해결했다.

다시 보니 처음 해결했던 코드가 많이 답답해보였다. 알고리즘은 항상 다양한 풀이가 존재한다는 것을 다시 한 번 기억해야겠다.

🧑🏻‍💻 코드

// 마지막 4자리 번호만 남기고 모두 '*'로 치환
// solution 1
function solution(phoneNumber) {
  const answer = [...phoneNumber]
    .map((number, i, arr) => (i >= arr.length - 4 ? number : '*'))
    .join('');
  return answer;
}

// solution 2
function solution(phoneNumber) {
  const last4Digits = phoneNumber.slice(-4);
  const answer = last4Digits.padStart(phoneNumber.length, '*');
  return answer;
}

// solution 3
function solution(phoneNumber) {
  const last4Digits = phoneNumber.slice(-4);
  const answer = '*'.repeat(phoneNumber.length - 4) + last4Digits;
  return answer;
}

solution('0277778888'); // '******8888'
// 앞의 4자리만 남기고 모두 '*'로 치환
// solution 4
function solution(phoneNumber) {
  const first4Digits = phoneNumber.slice(0, 4);
  const answer = first4Digits.padEnd(phoneNumber.length, '*');
  return answer;
}

// solution 5
function solution(phoneNumber) {
  const first4Digits = phoneNumber.slice(0, 4);
  const answer = first4Digits + '*'.repeat(phoneNumber.length - 4, '*');
  return answer;
}

solution('0277778888'); // '0277******'

📝 참고

MDN - String.prototype.padStart()
MDN - String.prototype.padEnd()

padStart()와 padEnd() (ES2017)

  • padStart() 메서드는 현재 문자열의 시작을 다른 문자열로 채워, 주어진 길이를 만족하는 새로운 문자열을 반환합니다. 채워넣기는 대상 문자열의 시작(좌측)부터 적용됩니다.
  • padEnd() 메서드는 현재 문자열에 다른 문자열을 채워, 주어진 길이를 만족하는 새로운 문자열을 반환합니다. 채워넣기는 대상 문자열의 끝(우측)부터 적용됩니다.
profile
🏠 ☕️ 🎞 🌿 + 🧑🏻‍💻

0개의 댓글