문제 설명
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
- phone_number는 길이 4 이상, 20이하인 문자열입니다.
| "01033334444" | "*******4444" |
| "027778888" | "*****8888" |
A. 내가 생각한 풀이 과정
1. 입력 문자열 1번째 ~ 끝에서 4번째 자리 전까지 자르기
2. 입력 문자열과 1번에서 자른 문자열 매핑시켜서 해당 문자열을 ' * ' 로 교체
이대로 진행 했을 때 문제점?
문자열 길이만큼 '*'로 교체되지 않음.
내가 원하는 결과 *******1234 면, 위 방법대로 하면, *1234로 변경됨.
A-1. 해결
1. 입력 문자열 1번째 ~ 끝에서 4번째 자리 전까지 자르기 (여기까진 같음)
2. 빈 배열 생성
let star = []
3. star 배열에 자른 문자열 길이만큼 '*'를 push 하는 반복문 작성
for(let i = 1; splitNumber.length >= i; i++) {
star.push('*')
}
4. start 배열 값 문자열로 변환
배열을 단순히 문자열로 변환했을 때는 배열 항목별로 ', '로 구분되어 문자열로 변환됨.
🔽

정규식을 이용해서 ', '를 삭제하는 작업 필요
5. 텍스트를 원하는 형태로 가공하기 위해서, 정규식 사용 (' , ' 삭제하고 연속된 문자열로 변환)
const solution = star.toString().replace(/,/g,'')
[정규식 의미]
1) /, => , 로 구분된 문자열
2) /g => 모든 패턴 체크
3) ,를 어떤 문자열로 변경할 것인지? 여기서 원하는 값은 삭제여서 아무 문자도 넣지 않음
6. 출력 값
answer = phone_number.replace(splitNumber, solution)
replace('교체될 문자열', '교체할 문자열')
7. 최종 코드 및 결과
function hide_numbers(phone_number) {
var answer = ''
const splitNumber = phone_number.slice(0,-4)
let star = []
for(let i = 1; splitNumber.length >= i; i++) {
star.push('*')
}
const solution = star.toString().replace(/,/g,'')
answer = phone_number.replace(splitNumber, solution)
return answer;
}

----------
내가 작성한 풀이법은 그렇게 효율적인 방법은 아닌 듯해서 다른 사람 코드를 봤다.
그중에서 참고하고 기억하고 싶은 풀이 몇 개를 정리하려고 한다.
----------
🔽
A-2 해결 2
function hide_numbers(s) {
return s.replace(/\d(?=\d{4})/g, "*");
}
[정규식 의미]
1. \d 숫자 전체
2. 끝에서 4번째까지
3./g 모든 패턴 체크
A-3 해결 3 - ✨✨✨ 쓰고 싶은 코드
function hide_numbers(s){
var result = "*".repeat(s.length - 4) + s.slice(-4);
return result;
}
[해결 방법]
1. ' * '을 문자열 끝에서 4번째 전까지 반복
2. 문자열을 끝에서 4번째 자리까지 자름
3. 1번 + 2번 합침
'알고리즘' 카테고리의 다른 글
| [프로그래머스][JS] Lv.1 자릿수 더하기 (1) | 2022.09.15 |
|---|---|
| [프로그래머스][JS] Lv.1 제일 작은 수 제거하기 (1) | 2022.09.13 |
| [프로그래머스][JS] Lv.1 x만큼 간격이 있는 n개의 숫자 (0) | 2021.10.26 |
| [프로그래머스][JS] Lv.1 평균구하기 (0) | 2021.10.25 |
| [프로그래머스][JS] Lv.1 직사각형 별찍기 (0) | 2021.10.25 |