programmers/level1

[level1] 핸드폰 번호 가리기

태기의삶 2020. 7. 18. 17:46

 

 

코딩테스트 연습 - 핸드폰 번호 가리기

프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자

programmers.co.kr

 

문제 설명 :

프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.

입력 : "01033334444"

출력 : "********4444"

 

입력 : "027778888"

출력 : "*****8888"

 

접근 방법 :

일단 출력 값을 보고 접근 방향성을 어떻게 할지 생각해보았다.

생각해 본 결과 이 숫자로 이루어진 문자열을 split("")을 이용해서 ["0", "1", "0", "3", "3", "3", "3", "4", "4", "4", "4"] 이렇게 모두 배열로 만들어 놓고, map() 안에서 삼항 연산자로 배열의 끝에서 4자리의 수를 뺀 부분까지만 "*"를 반환하고 이 이상부터 숫자를 반환하는 조건을 주는 로직을 짜보았다.

그리고 return 하기 전에 문자열을 배열로 변환했기 때문에 다시 문자열로 바꿔줘야 한다.

 join()을 통해 배열을 문자열로 바꿔서 return한다.

 

내가 짠 코드 :

function solution(phone_number) {
    let answer = phone_number.split("")
    return answer.map((num, idx) => {return idx < answer.length - 4 ? "*" : num;}).join("");
}

 

다른 사람이 짠 인상 깊은 코드 :

function hide_numbers(s){
  var result = "*".repeat(s.length - 4) + s.slice(-4);


  return result;
}

 

문자열 s의 길이에서 4자리 수를 뺀 길이만큼 *를 반복해 붙여 새로운 문자열을 반환하고, slice()를 통해 뒤에 4자리 숫자만 추출해 새로운 문자열을 result로 만들어 반환하는 로직이다.

굉장히 기본에 충실하면서 깔끔하게 짠 것 같아서 가져와보았다.

밑에는 참고용!

 

String.prototype.repeat()

repeat() 메서드는 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환합니다.

developer.mozilla.org