-
#AIL_23.11.21 // Programmers_핸드폰 번호 가리기AIL( Algorithm I Learned) 2023. 11. 21. 20:35
## AIL_핸드폰 번호 가리기
***문제 설명
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
***제한 조건
phone_number는 길이 4 이상, 20이하인 문자열입니다.
***입출력 예phone_number return "01033334444" "********4444" "027778888" "*****8888"
## solution.JavaScript
1. 문제의 접근 방식
주어진 문제는 전화번호에서 뒷 4자리를 제외한 나머지 숫자를 모두 *로 가린 문자열을 반환하는 문제입니다. 반복문을 사용하여 적절한 횟수만큼 생성하고, 그 뒤에 전화번호의 뒷 4자리를 이어붙이는 방식으로 문제를 해결할 수 있습니다.
2. 문제풀이
function solution(phone_number) { var answer = ''; for(let i = 0; i < phone_number.length-4; i++) { answer += "*"; } answer += phone_number.slice(-4); return answer; } /* 테스트 1 입력값 〉 "01033334444" 기댓값 〉 "*******4444" 실행 결과 〉 테스트를 통과하였습니다. 테스트 2 입력값 〉 "027778888" 기댓값 〉 "*****8888" 실행 결과 〉 테스트를 통과하였습니다. */
1. `for` 반복문을 사용하여 전화번호의 처음부터 뒷 4자리를 제외한 부분까지 순회합니다.
for(let i = 0; i < phone_number.length-4; i++) { answer += "*"; }
이 부분에선 `answer` 변수에 "을 추가해서 뒷자리를 뒷 4자리를 제외한 부분으로 "을 채웁니다. 반복문이 순회하면서 *이 누적되었고 `answer`에 추가됩니다.
2. `phone_number.slice(-4)`를 사용하여 전화번호의 뒷 4자리를 추출하여 이어 붙입니다.
answer += phone_number.slice(-4);
이 부분에선 `slice` 함수를 사용해서 전화번호의 뒷 4자리를 추출하고, 이를 `answer`에 이어 붙입니다.
3. 최종적으로 `answer`를 반환합니다.
3. 다른사람의 문제풀이 및 접근방식 분석
const solution = n => [...n].fill("*",0,n.length-4).join("") /* 테스트 1 입력값 〉 "01033334444" 기댓값 〉 "*******4444" 실행 결과 〉 테스트를 통과하였습니다. 테스트 2 입력값 〉 "027778888" 기댓값 〉 "*****8888" 실행 결과 〉 테스트를 통과하였습니다. */
위 코드는 간결하게 작성하기 위해 배열의 `fill` 메소드와 spread연산자(`[...n]`)을 사용하고 있습니다.
1. `[...n]`을 사용하여 `n`이라는 문자열을 배열로 변환합니다. 여기서 `...`은 spread 연산자로, 문자열을 각 문자로 분해하여 배열로 만듭니다.
예를 들어서 "01033334444"가 입력으로 주어진다면, `[...'01033334444']`는 `['0', '1', '0', '3', '3', '3', '3', '4', '4', '4', '4']` 와 같이 배열로 변환됩니다.
2. `fill("*", 0, n.length-4)` 배열을 "로 채우는데, 0번 인덱스 부터 뒷 4자리 전까지만 "로 체웁니다. `fill` 메소드의 첫 번쨰 인자는 채울 값, 두 번째 인자는 시작 인덱스, 세 번째 인자는 끝 인덱스 입니다.
예를 들어, "01033334444"가 입력으로 주어진 경우, 이 부분은 `[ '*', '*', '*', '*', '*', '*', '4', '4', '4', '4']` 와 같이 앞부분이 '*'로 채워진 배열을 생성합니다.
3. `.join("") 배열을 문자열로 변환합니다. 배열의 각 요소를 빈 문자열("")로 구분하여 하나의 문자열로 합칩니다.
예를 들어, [ '*', '*', '*', '*', '*', '*', '4', '4', '4', '4']`가 입력으로 주어진 경우, 이 부분은 `""******4444"`와 같이 문자열로 변환됩니다.
따라서 최종적으로 "01033334444"가 입력으로 주어지면 "******4444"와 같은 결과를 얻게 됩니다.
# 다시 돌아온 fill() 메서드 기억하자! 자주 만날 예정이라 한번 더 정리하겠습니다.
`fill()` 메서드는 배열의 모든 요소를 정적인 값으로 채우는 메서드입니다. 이 메서드는 주어진 값으로 배열을 채우고, 채울 시작 위치와 끝 위치를 선택적으로 지정할 수 있습니다.
array.fill(value, start, end)
** `value` 배열을 채울 값입니다.
** `start`(선택적) 배열을 채우기 시작할 인덱스입니다. 기본값은 0입니다.
** `end`(선택적) 배열을 채우기를 끝낼 인덱스입니다. 기본값은 배열의 길이입니다. (이 인덱스 포함x)
// 예시 1 - 기본적인 사용 let arr = [1, 2, 3, 4, 5]; arr.fill(0); // 모든 요소를 0으로 채움 // 결과: [0, 0, 0, 0, 0] // 예시 2 - 특정 범위에 대한 사용 let arr2 = [1, 2, 3, 4, 5]; arr2.fill(0, 1, 3); // 인덱스 1부터 3 이전까지의 요소를 0으로 채움 // 결과: [1, 0, 0, 4, 5] // 예시 3 - 길이가 5인 배열 생성 후 사용 let newArr = new Array(5).fill('hello'); // 길이가 5이고 모든 요소를 'hello'로 채움 // 결과: ['hello', 'hello', 'hello', 'hello', 'hello']
'AIL( Algorithm I Learned)' 카테고리의 다른 글
#AIL_23.11.23 // Programmers_월간 코드 챌린지 시즌1 > 내적 (0) 2023.11.23 #AIL_23.11.22 // Programmers_부족한 금액 계산하기 (2) 2023.11.22 #AIL_23.11.20 // Programmers_x만큼 간격이 있는 n개의 숫자 (2) 2023.11.20 #AIL_23.11.18 // Programmers_자릿수 더하기 (0) 2023.11.18 #AIL_23.11.17 // Programmers_나머지가 1이 되는 수 찾기 (0) 2023.11.17