[매일코딩-프로그래머스] 핸드폰 번호 가리기 01

2022. 1. 10. 10:55WEB Dev/CordingTEST

728x90

 

아침에 할 일이 많은데 잠깐이라도 머리를 풀고 가야 할 것 같아서 프로그래머스를 켰다.

힘들고... 서럽구만...

 


 

[문제] 핸드폰 번호 가리기

 

주어지는 변수는 phone_number 라는 변수고 전화번호이다. 전화번호 뒤의 4자리를 제외한 앞자리를 전부 * 애스터리스크로 가리고 리턴하는 함수를 작성하라.

 

근데 왜 제한 조건에는 s라고 되어 있는건지 모르겠지만

아무튼 주어지는 변수는 길이가 4자 이상, 20자 이하인 문자열이다.

 

[풀이]

 

제한 조건을 먼저 조건문으로 작성한다.

 

 

function solution(phone_number) {
    var answer = '';
    
    if( 4 <= phone_number <= 20) {
        
    }
    
    return answer;
}

 

 

그리고 문자열을 잘라 뒤의 4자리는 살리고, 나머지 앞의 문자를 변환한다.

 

 

자바스크립트의 문자열들을 변환하는 메소드를 찾아본다. 

변환, 대치 등으로 검색하면 될 것 같다. 

 

replace() 를 사용하면 될 것 같은데, replace는 문자열의 '특정' 문자를 다른 문자로 치환해주는 문자열이기 때문에 적합하지 않을 수 있다.

 

정규식을 사용할 수 있다는데, 자릿수 지정이 될까?

아니면 그냥 뒤의 4자리를 slice로 잘라놓고, 나머지 자리도 slice로 반환받아 변환하고, 합치는 방법을 사용해도 될 것 같다.

문자열 합치는것은 +로 간단하게 적용할 수 있기 때문에 위와 같은 순서로 진행해보자

 

우선 phone_number의 뒤의 4자리를 slice로 받아와보자

 

slice로 문자열을 뒤에서부터 자르기 위해서는 뒤에서부터 몇 번째인지 확인하고 -를 붙여주면 된다.

 

더 자세한 설명 참고 블로그

 

[JavaScript] 문자열 자르기 (substr, substring, slice)

자바스크립트에서 문자열을 자르기 위해서는 substr(), substring(), slice() 함수를 사용하면 된다. 문자열을 뒤에서부터 자르기 위해서는 slice() 함수를 사용하면 효율적이며 타 언어의 Right 함수와 비

gent.tistory.com

 

 

var 자를글자 = '가나다라마바사';

//'마바사' 만 잘라내고 싶음 (뒤에서 3번째)

var 결과 = 자를글자.slice(-3);

 

 

위의 slice를 적용하면 answer에 뒤에 4자리만 받아와줄 수 있다.

 

 

function solution(phone_number) {
    var answer = '';
    
    if( 4 <= phone_number <= 20) {
        answer = phone_number.slice(-4)
    }

    return answer;
}

 

 

그럼 이제 변수를 두 개로 나눠야하기 때문에 slice(-4)로 받아온 뒤의 4글자는 second 라는 변수로 할당하고 

앞의 글자는 first라는 변수로 할당해준다. 

 

 

first 변수에는 앞에서부터 뒤에서 5번째 글자까지가 필요하다. 그럼 인덱스 0번부터 뒤에서 -4번째 글자 앞에서 잘라내면 되니까 -4를 입력해주면 된다.

 

아래와 같이 first 변수에 0번째부터 뒤에서 -5번째 글자까지를 할당한다.  

 

 

function solution(phone_number) {
    var answer = '';
    var first;
    var second;
    
    if( 4 <= phone_number <= 20) {
        first = phone_number.slice(0, -4)
    }

    return first;
}

 

 

 

 

 

아까전에 만들어 둔 뒤에서부터 4번째 글자 slice를 second에 할당한다. 

 

 

function solution(phone_number) {
    var answer = '';
    var first;
    var second;
    
    if( 4 <= phone_number <= 20) {
        first = phone_number.slice(0, -4);
        second = phone_number.slice(-4);
    }

    return second;
}

 

 

그리고 first를 replace 메소드를 이용해 모두 *로 치환해준다.

이 때 replace에서는 바꿀 문자열을 지정해주어야 하는데, 우리는 first 변수 안의 모든 글자를 변환해야 하기 때문에 정규식이 필요하다. 

 

[자바스크립트(javascript)] 모든 문자열 치환(repalce,replaceAll)

문자열 치환 웹서비스를 구축하다보면 받아오는 데이터가 안내문등일 경우 그 안내문안에 이름과 전화번호등({nm},{phone}) 등으로 데이터가 들어와 이 데이터를 유동적으로 교체하는 경우가 많

hipdizzy.tistory.com

 

 

만들어둔 first는 모두 숫자이기 때문에 모든 숫자를 선택하는 /[0-9]/g 정규식을 replace 메소드의 첫번째 인자로 준다.

 

 

 

function solution(phone_number) {
    var answer = '';
    var first;
    var second;
    
    if( 4 <= phone_number <= 20) {
        first = phone_number.slice(0, -4).replace(/[0-9]/g,'*');
        second = phone_number.slice(-4);
    }

    return first;
}

 

 

 

 

원하는 모양이 나왔기 때문에 answer에 first와 second를 이어 할당해준다.

 

 

function solution(phone_number) {
    var answer = '';
    var first;
    var second;
    
    if( 4 <= phone_number <= 20) {
        first = phone_number.slice(0, -4).replace(/[0-9]/g,'*');
        second = phone_number.slice(-4);
        answer = first + second;
    }

    return answer;
}

 

 

분명 더 좋은 답이 있을거라 내일 한 번 다른 사람의 풀이를 봐야겠다.

 


 

 

728x90