프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *
으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
phone_number | return |
---|---|
"01033334444" | "******* 4444" |
"027778888" | "***** 8888" |
function solution(phone_number) {
var answer = '';
return answer;
}
//첫 번째 풀이
function solution(phone_number) {
var answer = ""
var back_number = phone_number.substr(-4, 4); //phone_number의 뒤에서 4번 째 index부터 4개를 빼라
var front_number = phone_number.substring(0, phone_number.length-4);
//phone_number의 0번 째 index부터 뒤에서 4번 째 index까지 빼라
front_number.replace(/[0-9]/g,'*'); //검색범위를 전역으로 확장하고 0~9사이의 문자를 찾아서 '*'로 대체해라
answer = front_number.replace(/[0-9]/g,'*') + back_number;
return answer;
}
//한 줄로 만들어보겠다고 만들어본 풀이
function solution(phone_number) {
return phone_number.slice(0, -4).replace(/[0-9]/g,'*') + phone_number.slice(-4);
//phone_number의 0번 째 index부터 뒤에서 4번 째 index까지 자르고 '*'로 대치한 것 + phone_number의 뒤에서 4번 째 index부터 자른 것
}
문제를 보자마자 가운데 글자 가져오기 에서 다른 풀이에 나왔던 함수 .substr() 가 생각났다. 일단 이 function으로 뒤 네 자리를 빼낼 수 있었다. 하지만 문제는 length가 정해져있지 않은 앞자리였다. 따라서 length 가 아닌 지정 index까지 빼낼 수 있는 .substring을 사용하여 앞자리를 빼냈다.
대체는 .replace()가 바로 떠올랐지만 어떻게 쓰는지 몰라 헤매다가 '정규식으로 특정 문자 제거' 를 참고하여 해결할 수 있었다.
다른 사람들의 ganzi
나는 코드들을 고작 하루 봤다고 나 또한 한 줄로 만들고 싶어져서 하나의 함수를 써야겠다고 생각했다. .substr()와 .substring()을 합쳐놓은 것 같은 .slice()를 사용하여 해결했고, 한 줄로 만들기 위해 .replace()를 바로 붙혀서 만들어버렸다.
(출처: https://developer.mozilla.org/ko/)
//첫 번째 풀이
function solution(phone_number) {
return phone_number.replace(/\d(?=\d{4})/g, "*");
}
//두 번째 풀이
function solution(phone_number){
var result = "*".repeat(phone_number.length - 4) + phone_number.slice(-4);
return result;
}
(출처: https://developer.mozilla.org/ko/)
*
로 대체한 것이다. 두 번째 사진에서는 \d{4}를 전역으로 검색해서 0101과 2345 이 두 개를 *
로 대체시킨 것이다. 마찬가지로 세 번째 사진에서는 0101, 2345, 6789 를 *
로 대체시켜 3개의 *
를 돌려준 것이다.