프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 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()
메서드는 현재 문자열에 다른 문자열을 채워, 주어진 길이를 만족하는 새로운 문자열을 반환합니다. 채워넣기는 대상 문자열의 끝(우측)부터 적용됩니다.