반응형
핸드폰 번호 가리기
문제 설명
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
제한 조건
- s는 길이 4 이상, 20이하인 문자열입니다.
입출력 예
phone_number | return |
"01033334444" | "*******4444" |
"027778888" | "*****8888" |
정규 표현식을 사용하자
문제를 읽고 바로 정규 표현식이 생각이 났다. 문제 설명에서 나온 '뒷 4자리를 제외한 나머지'를 찾아 *로 replace하면 되는 것이었다. 하지만 막상 정규 표현식으로 찾으려고 하니 답이 잘 나오지 않았고 고민 끝에 조금 수고스러운(?) 코드지만 테스트는 통과하게 되었다.
코드
function solution(phone_number) {
const len = phone_number.length - 4;
for (let i = 0; i < len; i++) {
phone_number = phone_number.replace(/\d/, '*');
}
return phone_number;
}
테스트를 통과한 후 분명 정규 표현식을 사용해서 푼 사람이 있을 것을 예상하고 다른 사람의 문제 풀이를 보았는데 역시나..!
문제 풀이가 존재했고 정규 표현식에 대해 좀 더 알게 되었다.
나같은 경우 뒷 4자리는 지정할 수 있었지만 뒷 4자리만 빼고 나머지를 지정하는 것에 어려움을 겪었는데 해당 문제는 전방탐색이라는 표현식을 통해 해결할 수 있다.
전방탐색(lookahead)패턴은 일치 영역을 발견해도 그 값을 반환하지 않는 패턴을 말합니다. ﹒﹒﹒
전방탐색 패턴의 구문은 ?=로 시작하고 등호(=) 다음에 오는 문자가 일치하는 영역에서 제외됩니다.
- http://minsone.github.io/regex/regexp-lookaround
전방탐색 표현식을 통해 패턴을 그룹화(4개의 숫자)해서 반환하지 않게 하고 그 앞의 나머지 숫자들을 지정 해주면 된다. 다시 말해 그룹화를 제외한(?=\d{4}) 앞의 패턴을 모두 지정하게 하면 된다.
function solution(phone_number) {
// 4개의 숫자를 제외한(?=\d{4}) 전방의 숫자들 탐색 \d
return phone_number.replace(/\d(?=\d{4})/g, "*");
}
반응형
'Algorithm' 카테고리의 다른 글
[프로그래머스] 최대공약수와 최소공배수 | JavaScript (0) | 2021.06.11 |
---|---|
[프로그래머스] 하샤드 수 | JavaScript (0) | 2021.06.10 |
[프로그래머스] x만큼 간격이 있는 n개의 숫자 | JavaScript (0) | 2021.06.08 |
[프로그래머스] 행렬의 덧셈 | JavaScript (0) | 2021.06.07 |
[프로그래머스] 제일 작은 수 제거하기 | JavaScript (0) | 2021.06.07 |