본문 바로가기
알고리즘

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

by 지 요니 2023. 4. 7.
🌟 문제설명
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 
나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
🌟 제한 조건
  • s는 길이 4 이상, 20이하인 문자열입니다.
🌟 입출력 예
phone_number return
"01033334444" "********4444"
"027778888" "*****8888"

 

🌟 나의 문제 풀이
function solution(phone_number) {
  var answer = "";
  let star = "*".repeat(phone_number.length - 4);

  answer = star + phone_number.slice(-4);

  return answer;
}

전체 문자열 길이의 마지막 4글자를 제외한 길이만큼 repeat()을 이용하여 *을 반복한 후에 slice()를 이용하여 이어 붙이기!

🌟 다른 사람 문제 풀이

 

function hide_numbers(s){
 // 4개의 숫자를 제외한(?=\d{4}) 전방의 숫자들 탐색 \d
  return s.replace(/\d(?=\d{4})/g, "*");
}

정규식이용... 이건 아직 잘 모르겠다ㅜ

 

전방탐색(lookahead)패턴은 일치 영역을 발견해도 그 값을 반환하지 않는 패턴
전방탐색 패턴의 구문은 ?=로 시작하고 등호(=) 다음에 오는 문자가 일치하는 영역에서 제외

전방탐색 표현식을 통해 패턴을 그룹화(4개의 숫자)해서 반환하지 않게 하고 그 앞의 나머지 숫자들을 지정 해주면 된다. 다시 말해 그룹화를 제외한(?=\d{4}) 앞의 패턴을 모두 지정

 

 

 

🌟 활용 메서드 
  • 정규표현식: "특정 패턴의 문자열"을 찾기 위한 표현 방식
더보기

/      / 패턴을 쓸공간

/g는 모든 문자열에 대해서 적용. g를 쓰지않으면 한개의 문자에 대해서만 적용

\d는 모든 숫자 [0-9]

x(?=y) : y에 대한 조건을 허용하는 것을 뒤따라오는 x에만 대응된다. 대응 되면 x의 값을 바꾼다.

x(?!y) : x에 대한 조건을 허용하는 것을 뒤따라오는 y에만 대응된다. 대응 되면 x의 값을 바꾼다.

{n} 앞 표현식이 n번 나타나는 부분에 대응된다. 반드시 양의 정수

("문자열").replace(/정규표현식/, "대체문자열") => "정규표현식"에 매칭되는 항목을 "대체문자열"로 변환

  • repeat(반복횟수): 지정된 횟수만큼 반복
  • slice():  배열로 부터 특정 범위를 복사한 값들을 담고 있는 새로운 배열을 만드는데 사용
    • 첫 번째 인자:  시작 index, 두 번째 인자: 종료 index => 시작index ~ 종료 index 값 복사하여 반환
    • 두번째 인자를 넘기지 않으면, 시작 인덱스가 가리키는 값부터 배열의 마지막 값까지 모두 복사
    • 첫번째 인자도 넘기지 않으면, 배열의 처음 값부터 마지막 값까지 전체를 복제
    • 시작 index나 종료 index가 음수 => 배열의 끝에서부터의 길이 나타냄

댓글