[프로그래머스] 핸드폰 번호 가리기
해결방안
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의 문자열 길이, '*')
이렇게 쓰면 해결됩니다.
해결방안 순서
- phone_number문자열을 뒷 4자리만 반환하기 : return phone_number.slice(-4)
- 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"
여기까지 프로그래머스 핸드폰 번호 가리기 해결방안에 대해 설명해보았습니다.