V-logue

[항해99] 프로그래머스 - 핸드폰 번호 가리기 본문

항해 99/프로그래머스 Algo

[항해99] 프로그래머스 - 핸드폰 번호 가리기

보그 2022. 5. 15. 18:15

문제의 설명을 보자면, 뒷 4자리를 제외한 나머지를 *로 바꿔라~ 라는 말이다.

function solution(phone_number) {
    var answer = '';
    if ( 4 <= phone_number.length <= 20) {
        var a = phone_number.slice(-4, phone_number.length);
        var b = phone_number.slice(0,-4);
        var c = (b).toString();
        
        c = c.replace(/[0-9]/gi, '*');

        answer = c + a
    }
    
    return answer;
}

일단 제한 조건에 phone_number의 길이가 4이상이며 20이하인 문자열이라고 나와있기 때문에 조건을 주었다.

 

그 다음 예를들어 01012345678이라면, *******5678로 뒷 4자리는 숫자로 나와야 하기 때문에 phone_number에서

 

뒷 4자리를 잘라주었고, 뒷 4자리를 제외한 나머지 또한 slice로 잘라주었다.

 

phone_number는 기본적으로 숫자로 이루어져있기 때문에, replace함수가 문자끼리만 바꾼다는 점을 고려하여 

앞 서 잘라둔 var b를 문자열로 바꾸는 과정을 거쳤으나 사실

 

var c = (b).toString();

라는 문장은 불필요한 문장이라는 생각이 들어 체점 후 이 부분을 지우고 다시 실행시켜보니 정상적으로 돌아갔다.

 

이 점에서 replace함수가 숫자또한 문자열로 자연스럽게 바꿔주는 건가하는 생각이 들었다.

 

replace함수란

String.replace();

로 쓰이는 함수로, 문자열 내에서 특정 문자를 다른 문자로 치환할 때 쓰이는 함수이다.

쓰이는 방식은

str.replace(regexp|substr, newSubstr|function)

먼저, 매개변수

1. regexp | substr은 정규식 객체 또는 문자열로 치환하기 위해 찾는 파라미터고

2. newString | function은 첫번째 파라미터를 대신할 문자열이나 함수를 의미한다.

 

결국 첫번째 매개변수를 두번째 매개변수로 치환시켜주는 작업을 도와주는

함수라고 생각하면 편하다.

 

아무튼, 일단 var b의 모든 내용물을 '*'로 바꿔주는 작업을 거쳐야 하는데, 여기서 정규식을 사용해

c = c.replace(/[0-9]/gi, '*');

라는 문장을 만들었다. 여기서 [0 - 9]는 0부터 9까지의 숫자를 의미하고 전화번호는 0 ~ 9까지 이루어진 숫자의

집합이기 때문에 자연스럽게 b의 내용물들은 전부 '*'로 치환됐다.

 

그리고 앞서 잘라둔 var a와 var c를 answer = c + a로 더해주면

 

짜잔~ 이런식으로 결과물이 나온다.

Comments