🗃️javascript/프로그래머스

핸드폰 번호 가리기(Lv.1)[slice(음수) 맨뒤에서부터 썰어옴.]

하얀성 2023. 1. 6. 10:43
<문제 설명>

 

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

제한 조건
  • phone_number는 길이 4 이상, 20이하인 문자열입니다.
입출력 예phone_numberreturn
"01033334444" "*******4444"
"027778888" "*****8888"

<제출 답안>

function solution(phone_number) {
     let change = phone_number.split("").filter((x,i) => i < phone_number.length-4)
    return change.map(x => x='*').join("")+[...phone_number].slice(phone_number.length-4, phone_number.length).join("")
    
}

답이 제법 복잡하다. 풀긴 풀었는데ㅎㅎ 좀더 짧은 코드로 쓰고 싶다.

아래 코드가 내 코드를 간결하게 옮긴듯한 코드다. repeat()은 생각도 못했네..

function hide_numbers(s){
  var result = "*".repeat(s.length - 4) + s.slice(-4);
  //함수를 완성해주세요

  return result;
}

아래와 같은 코드도 아주 훌륭하다.

const solution = n => [...n].fill("*",0,n.length-4).join("")

<보충>

음수 인덱스와 함께 slice() 사용

다음 예에서는 slice()음수 인덱스와 함께 사용합니다.

const str = "The morning is upon us.";
str.slice(-3); // 'us.'
str.slice(-3, -1); // 'us'
str.slice(0, -1); // 'The morning is upon us'
str.slice(4, -1); // 'morning is upon us'
클립 보드에 복사

이 예제는 11시작 색인을 찾기 위해 문자열의 끝에서 역방향으로 계산하고 끝 색인을 찾기 위해 문자열의 시작에서 정방향으로 계산합니다 16.

console.log(str.slice(-11, 16)); // "is u"
클립 보드에 복사

여기 11에서 시작 인덱스를 찾기 위해 시작부터 앞으로 카운트하고 끝 인덱스를 찾기 위해 끝에서 뒤로 카운트 7합니다.

console.log(str.slice(11, -7)); // " is u"
클립 보드에 복사

이러한 인수 5는 시작 색인을 찾기 위해 끝부터 역방향으로 계산하고 1끝 색인을 찾기 위해 끝에서 역방향으로 계산합니다.

console.log(str.slice(-5, -1)); // "n us"