
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phoneNumber로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 길이 4 이상, 20이하인 문자열입니다.
solution 1은 주어진 문자열 phoneNumber를 배열로 만들어 주고 각 요소를 순회하면서 인덱스 i가 arr.length - 4보다 크거나 같으면 value값 그대로 리턴하고 나머지는 *로 리턴했다.
solution 2는 새로운 메서드 padStart()를 알게 되어 적용한 코드다. 먼저 const last4Digits = phoneNumber.slice(-4);로 마지막 4자리 전화번호를 잘라내고, last4Digits에 대해서 padStart()메서드를 적용해주면 답을 쉽게 구할 수 있다. 이와 비슷한 메서드로 padEnd()가 있다. 자세한 내용은 참고사항에 MDN 링크를 걸어두었다.
solution 3은 solution 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()메서드는 현재 문자열에 다른 문자열을 채워, 주어진 길이를 만족하는 새로운 문자열을 반환합니다. 채워넣기는 대상 문자열의 끝(우측)부터 적용됩니다.