✏️ 문제 설명
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
제한 조건
- phone_number는 길이 4 이상, 20이하인 문자열입니다.
입출력 예
phone_number | return |
"01033334444" | "*******4444" |
"027778888" | "*****8888" |
✏️ 문제 풀이
- 내 풀이
function solution(phone_number) {
let endNumber = [...phone_number].splice(-4).join('');
phone_number = phone_number.replace(endNumber, '')
const star = phone_number.replace(/\d/g, '*');
return star+endNumber;
}
먼저 뒤에 네 자리를 먼저 잘라서 보관하고, 나머지 번호들은 정규 표현식을 활용해 *로 바꿔준 후 다시 뒷번호를 붙여 반환해 줬다.
- 다른 풀이
function solution(phone_number) {
return phone_number.replace(/\d(?=\d{4})/g, "*");
}
function solution(phone_number){
let result = "*".repeat(phone_number.length - 4) + phone_number.slice(-4);
return result;
}
제일 직관적이고 깔끔한 코드
const solution = n => [...n].fill("*",0,n.length-4).join("")
n을 복사해 배열로 바꿔주고 fill() 메서드로 처음부터 마지막 4개를 제외하고 바로 *로 채워주는 풀이
▶ Array.prototype.fill()
// Syntax
fill(value)
fill(value, start)
fill(value, start, end)
: fill() 메서드는 배열의 모든 요소를 시작 인덱스(기본값 0)에서 끝 인덱스(기본값 array.length)까지 정적 값(static value)으로 변경해 수정된 배열을 반환한다.
const array1 = [1, 2, 3, 4];
// Fill with 0 from position 2 until position 4
console.log(array1.fill(0, 2, 4));
// Expected output: Array [1, 2, 0, 0]
// Fill with 5 from position 1
console.log(array1.fill(5, 1));
// Expected output: Array [1, 5, 5, 5]
console.log(array1.fill(6));
// Expected output: Array [6, 6, 6, 6]
매개변수(Parameters)
value : 배열을 채울 값, 배열의 모든 요소는 정확한 value 값이 된다. 객체인 경우 배열의 각 슬롯은 해당 객체를 참조한다.
start (선택) : 채우기를 시작할 0부터 시작하는 인덱스로 정수로 변환된다.
- 음수 인덱스는 배열의 끝에서 다시 카운트된다. start < 0이면 start + array.length가 사용.
- start < -array.length 또는 start 생략하면 0이 사용됨.
- start >= array.length인 경우 인덱스가 채워지지 않는다.
end (선택) : 채우기를 종료할 0부터 시작하는 인덱스로 정수로 변환된다. fill()까지 채우지만 end는 포함하지 않는다.
- 음수 인덱스는 배열의 끝에서 다시 카운트된다. end < 0이면 end + array.length가 사용.
- end < -array.length이면 0이 사용됨.
- end >= array.length 또는 end 생략하면 array.length 사용되어 끝까지 모든 인덱스가 채워진다.
- end가 start 정규화(normalization) 전이나 후에 위치하면 인덱스가 채워지지 않는다.
반환 값(Return value)
value로 채워진 수정된 배열.
한 문제로 다양한 풀이가 나옴이 재밌어서 정리해 봤다.
🙂 공부하며 정리하는 글입니다. 잘못된 점이 있다면 피드백 주시면 감사합니다.
'Algorithms > 코테 문풀' 카테고리의 다른 글
[프로그래머스] 최대공약수와 최소공배수 - JavaScript (0) | 2023.01.23 |
---|---|
[프로그래머스]행렬의 덧셈 - JavaScript / 2중 for문, map() 풀이 (0) | 2023.01.23 |
[프로그래머스] JadenCase 문자열 만들기 - JavaScript / substring(), slice(), charAt() + 레거시(lagacy)란? (0) | 2023.01.20 |
[프로그래머스] 두 정수 사이의 합 - JavaScript / 등차수열의 합 공식 (0) | 2023.01.19 |
[프로그래머스] 가장 가까운 같은 글자 - JavaScript / Stack (0) | 2023.01.18 |