프로그래머스 코딩테스트 레벨 1 - 핸드폰 번호 가리기 풀이 해석 및 답안 [자바스크립트]
https://school.programmers.co.kr/learn/courses/30/lessons/12948
문제
전화번호를 마스킹하는 문제. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒤 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수를 만들면 된다.
해당 문제는 실무에서도 굉장히 많이 활용하는 유틸 함수이기 때문에 제대로 알아두면 좋겠다고 생각했다. 전화번호뿐만 아니라 아이디, 주민등록번호 등 민감한 개인정보에서는 거의 필수적으로 사용한다. 문자열의 길이나 숫자, 기호 등의 형태가 조금씩 다르긴 하지만 어차피 문자열을 받아와 비교하기 때문에 차이점이 크진 않다.
제한사항
phone_number는 길이 4 이상, 20 이하인 문자열이다. 문제를 풀면서 신경 써서 코딩하진 않았다.
답
function solution(phone_number) {
var answer = phone_number.toString().split(""); //문자열을 split으로 쪼갠다. 배열을 만들기 위해
let masking;
for(let i=0;i<answer.length-4;i++) { //뒤에 4개의 문자를 제외한 문자를 for문을 돌며
answer[i] = "*"; //모두 *로 변환시킨다.
}
return answer.join(""); //배열을 다시 문자열로 변환시킨다.
}
solution 함수에서 phone_number라는 매개변수를 입력받는다.
변수 answer는 phone_number를 문자 하나하나씩 쪼개 배열을 만든다. 배열을 만드는 데에는 split() 함수를 사용하였다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/split
split은 빈문자열 대신 변수를 넣으면 그 변수를 기준으로 쪼개서 배열을 만든다.
예를 들어, '동해물과/백두산이/마르고' 를 split('/') 으로 쪼개면 3 크기의 '동해물과', '백두산이', '마르고' 배열을 만들게 된다.
지금의 경우 “”로 split을 사용하여 문자 하나하나를 쪼개 배열로 만들었다. 이렇게 한 문자씩 쪼갠 배열을 가지고 for문을 돌리게 된다. 마지막 4자리를 제외한 모든 글자를 한번씩 순회하며 글자 대신 문자 '*' 를 삽입한다. 남은 문자는 마지막 4자리를 빼고 모두 '*' 이 된다.
마지막으로 변환한 배열 answer를 다시 문자열로 조합한다. join() 함수를 사용했다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/join
split()과 마찬가지로 구분자를 넣으면 배열을 합치는 부분에 구분자를 모두 넣어 문자열을 완성한다.
'동해물과','백두산이,'마르고' 를 join('/') 으로 조합하면 다시 '동해물과/백두산이/마르고' 라는 문자열이 되는 것이다.
다른 사람의 풀이
정규식을 사용하여 보다 간편하게 문제를 풀 수 있었다. 또 repeat() 함수와 slice() 함수를 사용하여 for문 대신 값을 순회하여 '*' 를 만든 뒤 남은 문자열을 slice로 붙이는 방법도 있었다.
var result = "*".repeat(s.length - 4) + s.slice(-4); //이렇게!
자바스크립트의 다양한 함수를 보는 데는 다른 사람의 풀이만 한 게 없는 듯하다. 그리고 굉장히 다양한 접근법이 있다는 것도.