한 걸음씩 기록하며

[프로그래머스 코딩테스트] 핸드폰 번호 가리기 본문

알고리즘 & 코딩테스트

[프로그래머스 코딩테스트] 핸드폰 번호 가리기

Haksae 2022. 1. 15. 02:27

[핸드폰 번호 가리기]

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

 

⛏제한 조건

  • s는 길이 4 이상, 20이하인 문자열입니다.

 

📁 입출력 예시

 

👉🏻  답안

1) .repeat(), .slice() 함수 사용

function solution(phone_number) {
  let answer = '*'.repeat(phone_number.length-4) + phone_number.slice(-4) 
  return answer;
}

2) for, if 문 사용

function solution(phone_number) {
  let answer = "";

  for (let i = 0; i < phone_number.length; i++) {
    if (i > phone_number.length - 5) {
      answer += phone_number[i];
    } else {
      answer += "*";
    }
  }
  return answer;
}

📑  간단한 설명

1) repeat(), slice() 함수

- str.repeat(count) : repeat는 문자열을 반복한 값을 반환하는 메서드이다. str을 count만큼 반복 출력한다.

- .slice(begin, end) : 인덱스 begin부터 end까지 return 받는다. 다만 기존의 값은 변하지 않는다.

  ex) "hello".slice(1,3) -> "el"

 

*substring()과, slice() 의 차이점

-> 여러 차이점이 있지만 근본적인 차이점은 slice()에서는 음수를 지원한다. substring은 음수를 입력하면 0으로 계산한다.

 

그래서 결국 1)에서 이 두 함수를 사용한 것이다. .slice(-4)는 index -4 위치인 열부터 마지막 열까지 return 받는다는 것이다.

 

2) for, if 문

핸드폰 번호가 length-5보다 크면 기존 번호를 입력하고, 아니면 *로 리턴 받았다.

 

 

💪🏻 공부하면 좋을 답안

function hide_numbers(s) {
  return s.replace(/\d(?=\d{4})/g, "*");
}
  • 충격적인 답안이다.. 정규식이라고 한다..
var newStr = str.replace(정규식|부분 문자열, 새로운 부분 문자열|함수)
// 문자열 치환과 관련된 빌트인 함수로서, 문자열을 치환해준다.
  • 일반 문자열 변환
var text = 'aaaabbbbcccc';
text.replace('b', 'a'); // aaaaabbbcccc
// 문자열에서 가장 처음으로 찾은 문자를 바꿔준다.
  • 정규식을 사용한 문자열 치환
var text = 'aaaabbbbcccc';

var regexForB = /b/gi;     // b 문자 전체
var regexForC = /c/gi;     // c 문자 전체

text
  .replace(regexForB, 'a') // aaaaaaaacccc
  .replace(regexForC, 'a') // aaaaaaaaaaaa
  
  // 이해가 가질 않는다... 정규식 앞으로 공부해야겠다..

 

replace() 참고문서

https://deeplify.dev/front-end/js/replace-and-replace-all

Comments