프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
phone_number | return |
---|---|
"01033334444" | "* * * * * * *4444" |
"027778888" | "* * * * *8888" |
.repeat(), .substring() 메서드를 사용하자.
- str.repeat(count);
repeat() 메서드는 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환한다.- str.substring(시작,종료 or 시작);
string 객체의 시작 인덱스로 부터 종료 인덱스 전 까지 문자열의 부분 문자열을 반환한다.
function solution(phone_number) {
const len = phone_number.length - 4;
return "*".repeat(len) + phone_number.substring(len);
// 뒤 4자리를 기준으로 앞의 번호들을 repeat를 사용해 *처리해주고, substring은 인덱스 값을 사용해 시작점을 정해줄 수 있다.
}
헷갈림 주의!
.repeat()는 매개변수의 값만큼 새로운 문자열로 반환해주고, .substring()은 매개변수의 값을 인덱스 값으로 하여 그 시점부터 부분 문자열을 반환한다.
substring()보다 slice()를 사용하는 것을 추천한다는 것을 보고 slice()로 재풀이 해보았다.
- str.slice(시작, 종료 or 시작);
어떤 배열의 begin부터 end까지(end 미포함)에 대한 얕은 복사본을 새로운 배열 객체로 반환한다. 원본 배열은 바뀌지 않는다. 음수를 사용할 경우 뒤부터 불러온다.
function solution(phone_number) {
const len = phone_number.length - 4;
return "*".repeat(len) + phone_number.slice(-4);
// 뒤 4자리를 기준으로 앞의 번호들을 repeat()를 사용해 *처리해주고, slice()를 사용해 뒤의 4자리만 불러온다.
}
내가 좋아하는 메서드를 이용하여 푸는 문제였다.
각자 다른 기능을 제공하는 메서드지만, 활용도에 따라 같은 효율을 볼 수 있다는 점이 신기했던 문제다. slice()는 매개변수로 음수를 지원하는 것, 기억하기!