문제
프로그래머스 모바일은
개인정보 보호를 위해 고지서를 보낼 때
고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때,
전화번호의 뒷 4자리를 제외한
나머지 숫자를 전부 *으로 가린 문자열을
리턴하는 함수, solution을 완성해주세요.
해결
function solution (phone_number) {
return phone_number
.slice(0, -4)
.replace(/[0-9]/g,"*")
+ phone_number
.substring(phone_number.length - 4)
}
slice로 뒤 4번째 인덱스 전까지 문자열을 자른다.
replace로 숫자를 모두 *로 치환한다.
그리고 substring으로 length - 4를 하면 뒤의 4자리만 추출된다.
이를 더해주면 답이 나왔다.
다른 사람의 풀이
const solution2 = n => [...n].fill("*",0,n.length-4).join("")
숫자를 [...n] spread operator로 배열 변환한 뒤
fill 메서드를 통해 0부터 length의 -4 까지 * 로 채워주고
join으로 다시 문자열로 합쳐주면 답이 나오는 방식을 사용했다.
function solution3(s){
var result = "*".repeat(s.length - 4) + s.slice(-4);
return result;
}
repeat 메서드를 통해 length -4 까지 *을 반복하고,
slice로 뒤에서 4번째 인덱스만 추출해 더해주었다.
function solution4(s){
return s.replace(/\d(?=\d{4})/g, "*");
}
(1) (?='') : 특정 문자 앞까지 조회
(2) {} : 숫자로 단위를 표현하여 선택
(3) \d : 숫자를 의미
위 정규식을 풀어보면
'\d 숫자에서 (?=\d{4}) 숫자 4자리 전까지 /g 전체 범위를 *로 바꿔라'
라고 명시한 것 같다.
정규식 표현도 공부해야겠다.
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 제일 작은 수 제거하기 (0) | 2023.12.13 |
---|---|
[코딩테스트] 없는 숫자 더하기 (0) | 2023.12.12 |
[코딩테스트] 두 정수 사이의 합 (1) | 2023.12.04 |
[코딩테스트] 콜라츠 추측 (0) | 2023.11.30 |
[코딩테스트] 하샤드 수 (1) | 2023.11.24 |