https://programmers.co.kr/learn/courses/30/lessons/12948
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부
*으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
제한 조건
- s는 길이 4 이상, 20이하인 문자열입니다.
입출력 예
< 문제 풀이 >
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부
*으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
function solution(phone_number) {
let star = '*'
let frontnum = ''
for (let i = 0; i < phone_number.length-4; i++) {
frontnum += star;
}
return phone_number.replace(phone_number.substr(0, phone_number.length-4), frontnum)
}
*로 처리할 부분을 미리 만들어 놓음. phone_number 길이의 -4 만큼으로 만들어 놓는다. 만들어 놓은 *을 원래 있던 것과 바꿔줄 것이다. .replace()를 사용해서 바꾼다. replace 안에는 substr을 썼다. *로 바꿔줄 부분을 자르기 위해서이다. substr은 시작값, 끝나는 길이를 써주면 된다. 나는 0부터 length-4만큼을 바꿔주기로 하였기 때문에 substr 안에 0, .length-4를 썼다. 다음으로 replace로 (바꾸고 싶은 부분, 바꿀부분) 써서 바꿔주면 된다. 그래서 바꾸고 싶은 부분은 substr으로 잘라준 부분이고, 바꿀 것은 frontnum이다.
string.substr(start, length)
번외
마지막 자리 4개만 *로 바꾸는 줄 알고 잘못 풀은 것.
// 맨 뒷자리 4개만 **** 로 잘못함
// function solution(phone_number) {
// return phone_number.slice(0, phone_number.length -4) + '****'
// }
다른 사람들은 어떻게 풀었을까?
이번에 다른 사람들의 풀이 부분에서 배울게 많아서 정리해본다.
// 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
function hide_numbers(s) {
return s.replace(/\d(?=\d{4})/g, "*");
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log("결과 : " + hide_numbers('01033334444'));
정규식을 사용한 풀이이다. /\d(?=\d{4})/g 이걸 먼저 살펴보겠다. /가 나오면 그 다음에는 특수문자가 나올거라는 의미라고 한다. 그리고 닫을 때도 /를 써서 닫아준다. \d 는 숫자 라는 의미이다. 코드를 설명해주는 곳을 찾아서 아래 그림으로 다시 이어가보도록 한다.
(?=\d{4}) 의 의미는 숫자 4개를 찾는 다는 의미이다. \d는 숫자 하나씩을 찾아 준다. 그리고 replace로 *로 바꿔준다.
.replace () 도 찾아보았다.
Definition and Usage
The replace() method searches a string for a value or a regular expression.
The replace() method returns a new string with the value(s) replaced.
The replace() method does not change the original string.
정의와 사용법
replace()는 문자열의 value 나 정규식을 찾는다.
replace()는 바뀌어진 value(들)로 새로운 문자열로 만들어서 리턴해준다.
replace()는 원래의 문자열을 바꾸지 않는다.
Syntax (문법)
Parameters
Parameter | Description |
searchValue | Required. The value, or regular expression, to search for. |
newValue | Required. The new value (to replace with). |
// 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
function hide_numbers(s){
var result = "*".repeat(s.length - 4) + s.slice(-4);
//함수를 완성해주세요
return result;
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log("결과 : " + hide_numbers('01033334444'));
여기서는 repeat와 slice가 눈에 띈다. repeat는 초반에 쓰다가 잊고 있었는데 다시보니 너무 유용해보인다. repeat()는 문자열.repeat(반복하고 싶은 만큼)으로 사용한다. slice는 slice(시작할 index, 끝 index)로 사용하고 그 부분만 잘라준다. 그래서 코드를 살펴보면, *를 length-4 한만큼을 반복해주고, 마지막 -4 부터 끝까지 잘린부분을 더해준다.
참고
정규표현식 기초/기본 쉽고 상세한 사용 방법 정리 (샘플 예제 코드) https://curryyou.tistory.com/234
stack over flow Masking last 4 digits in JavaScript
string.replace() https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/replace
string replace() https://www.w3schools.com/jsref/jsref_replace.asp
'Algorithm' 카테고리의 다른 글
[알고리즘] 백준 파이썬 1929번 소수 구하기 | 쉽게 이해하기 | 자세한 설명 (0) | 2022.03.04 |
---|---|
[알고리즘] 백준 파이썬 2839번 설탕배달 | 파이썬 입력하는 법 (0) | 2022.03.02 |
[알고리즘] #8 평균 구하기 | 프로그래머스 (0) | 2022.01.20 |
[알고리즘] #12 부족한 금액 계산하기 | 프로그래머스 (0) | 2022.01.20 |
[알고리즘] #14 나누어 떨어지는 숫자 배열 | 프로그래머스 (0) | 2022.01.20 |