알고리즘🅰/프로그래머스

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

개발조각 2022. 3. 8. 14:06
728x90
반응형


해결방안

function solution(phone_number) {
    return phone_number.slice(-4).padStart(phone_number.length, '*')
}

 

이 문제의 입출력 예에서 return값을 보자마자 이건 padStart()메서드를 사용하면 쉽게 구할 수 있겠다.라는 생각이 들었습니다.

 

 

padStart()메서드가 뭔지 살펴보자면

MDN Web Docs
padStart() 메서드는 현재 문자열의 시작을 다른 문자열로 채워, 주어진 길이를 만족하는 새로운 문자열을 반환합니다. 채워 넣기는 대상 문자열의 시작(좌측)부터 적용됩니다.

구문 : str.padStart(targetLength [, padString])

  • targetLength : 목표 문자열 길이. 현재 문자열의 길이보다 작다면 채워 넣지 않고 그대로 반환.
  • padString Optional : 현재 문자열에 채워 넣을 다른 문자열. 문자열이 너무 길어 목표 문자열 길이를 초과한다면 좌측 일부를 잘라서 넣음. 기본값은 " ". (U+0020)
// padStart()메서드 예제
const str1 = '5';
console.log(str1.padStart(2, '0')); //"05"

 

문제에서 "phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수"를 구하라 했습니다.

이걸 padStart()로 적용한 상태로 쓰자면

  • phone_number의 뒷 4자리.padStart(phone_number의 문자열 길이, '*')

이렇게 쓰면 해결됩니다.

 

해결방안 순서

  1. phone_number문자열을 뒷 4자리만 반환하기 : return phone_number.slice(-4)
  2. padStart를 사용해서 뒷 4자리 제외 나머지는 *로 바꾸기 : padStart(phone_number.length, '*')

 

 

1단계. phone_number문자열을 뒷 4자리만 반환하기 : phone_number.slice(-4)

문자열 뒤에 4자리만 반환하려면 slice()메서드를 쓰시면 쉽게 구할 수 있습니다.

 

MDN Web Docs
String.prototype.slice()
slice() 메서드는 문자열의 일부를 추출하면서 새로운 문자열을 반환합니다.

문법 : str.slice(beginIndex[, endIndex])

beginIndex
추출 시작점인 0부터 시작하는 인덱스입니다. 
만약 음수라면, beginIndex는  strLength(문자열 길이) + beginIndex로 취급됩니다. 
(예를 들어 beginIndex가 -3이면 시작점은 strLength - 3).
만약 beginIndex가 strLength 보다 크거나 같은 경우, slice()는 빈 문자열을 반환합니다.

 

endIndex
0부터 시작하는 추출 종료점 인덱스로 그 직전까지 추출됩니다.  

인덱스 위치의 문자는 추출에 포함되지 않습니다.
만약 endIndex가 생략된다면, silce()는 문자열 마지막까지 추출합니다. 

만약 음수라면, endIndex는 strLength(문자열 길이) + endIndex로 취급됩니다.

(예를 들어 endIndex가 -3이면 종료점은 strLength - 3)

// String.slice()메서드 예제
const str = 'The quick brown fox jumps over the lazy dog.';

console.log(str.slice(31)); // "the lazy dog."
console.log(str.slice(4, 19)); // "quick brown fox"
console.log(str.slice(-4)); // "dog."
console.log(str.slice(-9, -5)); // "lazy"

 

테스트 1 (phone_number = "01033334444")
phone_number.slice(-4) -> "01033334444".slice(-4) -> "4444"

테스트 2 (phone_number = "027778888")
phone_number.slice(-4) -> "027778888" .slice(-4) -> "8888"

 

2단계. padStart를 사용해서 뒷 4자리 제외 나머지는 *로 바꾸기 : padStart(phone_number.length, '*')

padStart를 사용해서 뒷 4자리 제외하고 앞자리를 다 *로 바꾸어 주어야 됩니다.

  • str.padStart(목표 문자열 길이, 현재 문자열에 채워 넣을 다른 문자열)

목표 문자열 길이 : phone_number.length

전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가리라고 해서 문자열의 길이를 넣어주었습니다.

 

현재 문자열에 채워 넣을 다른 문자열 : '*'

전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가리라고 해서 '*'을 넣어주었습니다.

 

테스트 1 (phone_number = "01033334444")
phone_number.slice(-4) -> "01033334444".slice(-4) -> "4444"
padStart(phone_number.length, '*') -> "*******4444"

테스트 2 (phone_number = "027778888")
phone_number.slice(-4) -> "027778888" .slice(-4) -> "8888"
padStart(phone_number.length, '*') -> "*****8888"

여기까지 프로그래머스 핸드폰 번호 가리기 해결방안에 대해 설명해보았습니다.

728x90
반응형