본문 바로가기

Algorithm

[알고리즘] 프로그래머스 #9 핸드폰 번호 가리기 | replace( )

728x90

https://programmers.co.kr/learn/courses/30/lessons/12948

 

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

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

programmers.co.kr

 

 

 


 

 

 

문제 설명

 

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

 

 

제한 조건

 

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

 

 

입출력 예

 

 

 

 


 

 

 

< 문제 풀이 >

 

프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부
 
*으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
function solution(phone_number) {  
  let star = '*'
  let frontnum = ''
  for (let i = 0; i < phone_number.length-4; i++) {
    frontnum += star;
  }
   return  phone_number.replace(phone_number.substr(0, phone_number.length-4), frontnum)
}

 

*로 처리할 부분을 미리 만들어 놓음. phone_number 길이의 -4 만큼으로 만들어 놓는다. 만들어 놓은 *을 원래 있던 것과 바꿔줄 것이다. .replace()를 사용해서 바꾼다. replace 안에는 substr을 썼다. *로 바꿔줄 부분을 자르기 위해서이다. substr은 시작값, 끝나는 길이를 써주면 된다. 나는 0부터 length-4만큼을 바꿔주기로 하였기 때문에 substr 안에 0, .length-4를 썼다. 다음으로 replace로 (바꾸고 싶은 부분, 바꿀부분) 써서 바꿔주면 된다. 그래서 바꾸고 싶은 부분은 substr으로 잘라준 부분이고, 바꿀 것은 frontnum이다. 

 

더보기
substr syntax (문법)

string.substr(start, length)

 

 

 


 

번외

 

마지막 자리 4개만 *로 바꾸는 줄 알고 잘못 풀은 것.

 

// 맨 뒷자리 4개만 **** 로 잘못함
// function solution(phone_number) {  
//   return phone_number.slice(0, phone_number.length -4) + '****'
// }

 

 

 


 

 

다른 사람들은 어떻게 풀었을까?

 

https://programmers.co.kr/learn/courses/30/lessons/12948/solution_groups?language=javascript&type=all 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

이번에 다른 사람들의 풀이 부분에서 배울게 많아서 정리해본다.

 

// 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
function hide_numbers(s) {
  return s.replace(/\d(?=\d{4})/g, "*");
}

// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log("결과 : " + hide_numbers('01033334444'));

정규식을 사용한 풀이이다.  /\d(?=\d{4})/g 이걸 먼저 살펴보겠다. /가 나오면 그 다음에는 특수문자가 나올거라는 의미라고 한다. 그리고 닫을 때도 /를 써서 닫아준다. \d 는 숫자 라는 의미이다. 코드를 설명해주는 곳을 찾아서 아래 그림으로 다시 이어가보도록 한다.

 

(?=\d{4}) 의 의미는 숫자 4개를 찾는 다는 의미이다. \d는 숫자 하나씩을 찾아 준다. 그리고 replace로 *로 바꿔준다. 

 

 

 


 

 

.replace () 도 찾아보았다.

Definition and Usage
The replace() method searches a string for a value or a regular expression.
The replace() method returns a new string with the value(s) replaced.
The replace() method does not change the original string.

 

정의와 사용법

replace()는 문자열의 value 나 정규식을 찾는다.

replace()는 바뀌어진 value(들)로 새로운 문자열로 만들어서 리턴해준다.

replace()는 원래의 문자열을 바꾸지 않는다.

 

Syntax (문법)

string.replace(searchValue, newValue)
 
string.replace(바꾸기전 값, 바꿀려고 하는 값)

Parameters

Parameter Description
searchValue Required.
The value, or regular expression, to search for.
newValue Required.
The new value (to replace with).

 

 


 

 

// 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
function hide_numbers(s){
  var result = "*".repeat(s.length - 4) + s.slice(-4);
  //함수를 완성해주세요

  return result;
}

// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log("결과 : " + hide_numbers('01033334444'));

 

여기서는 repeat와 slice가 눈에 띈다. repeat는 초반에 쓰다가 잊고 있었는데 다시보니 너무 유용해보인다.  repeat()는 문자열.repeat(반복하고 싶은 만큼)으로 사용한다. slice는 slice(시작할 index, 끝 index)로 사용하고 그 부분만 잘라준다. 그래서 코드를 살펴보면, *를 length-4 한만큼을 반복해주고, 마지막 -4 부터 끝까지 잘린부분을 더해준다.

 

 

 

 

 

 

 

 

 

참고

정규표현식 기초/기본 쉽고 상세한 사용 방법 정리 (샘플 예제 코드)  https://curryyou.tistory.com/234 

stack over flow Masking last 4 digits in JavaScript

string.replace() https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/replace

string replace() https://www.w3schools.com/jsref/jsref_replace.asp

 

728x90