❗️ 문제
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/courses/30/lessons/12948
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때,
전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해 주세요.
❓ 나의 풀이
function solution(phone_number) {
let frontNum = phone_number.slice(-0, -4);
let backNum = phone_number.split(frontNum).join("");
return frontNum.replaceAll(/./g, "*") + backNum;
}
slice, replaceAll 메서드를 사용해서 풀었다.
우선, 전화번호 뒷 4자리와 앞자리를 저장하는 변수를 만들었다.
앞자리는 뒷 4자리만 제외한 부분이니까, slice 메서드를 이용해서 뒤부터 4자리까지 잘라 frontNum 변수에 저장했고
뒷자리는 split 메서드를 사용해 phone_number 를 frontNum 을 기준으로 분리한 뒤, 다시 join 으로 합쳐 backNum 변수에 저장했다.
테스트 케이스를 예로 들면,
frontNum 은 "01033334444" 에서 뒷 4자리를 자른 "0103333" 이 된다. ➡️ frontNum = "0103333"
backNum 은 "01033334444" 를 frontNum 을 기준으로 즉, "0103333" 을 기준으로 나누어 ["", "4444"] 가 되고,
이걸 다시 join 으로 합치면 ➡️ backNum = "4444" 가 된다.
그다음 frontNum 의 모든 문자를 * 로 바꾸고 backNum 과 다시 합쳐주면 된다.
이를 위해 replaceAll 메서드를 사용했다.
정규 표현식 /./g 를 사용하여 frontNum 의 모든 문자를 * 로 대체했다.
그러면 frontNum = "*******" 로 바뀌고 이걸 backNum 과 더하면 "*******4444" 가 된다. (문자열은 덧셈 가능!)
++) replaceAll
문자열에서 특정 패턴이나 문자를 찾아 다른 문자로 일괄 변경할 때 사용된다.
첫 번째 인자는 바꿀 대상(패턴이나 문자)를 의미하고, 두 번째 인자는 바꿀 문자를 의미한다.
++) /./g
. 은 문자 하나를 의미함.
/g 는 global 을 의미함.
즉, 문자열 내 모든 문자를 찾아서 특정 문자나 패턴으로 대체하겠다는 뜻 (여기서는 *로 대체)
💡 참고 문헌
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 전화번호 목록 (Level 2, JavaScript) (0) | 2024.10.11 |
---|---|
[프로그래머스] 완주하지 못한 선수 (Level 1, JavaScript) (0) | 2024.10.10 |
[프로그래머스] 음양 더하기 (Level 1, JavaScript) (0) | 2024.09.19 |
[프로그래머스] 나머지가 1이 되는 수 찾기 (Level 1, JavaScript) (3) | 2024.09.16 |
[프로그래머스] 정수 제곱근 판별 (Level 1, JavaScript) (0) | 2024.09.10 |